js中遍历数组加到新数组_js中数组的循环与遍历forEach,map 对于前端的循环遍历我们知道有
针对js数组的forEach()、map()、filter()、reduce()⽅法
针对js对象的for/in语句(for/in也能遍历数组,但不推荐)
针对jq数组/对象的$.each()⽅法
在语法和参数上他们有什么不同呢?
1.forEach: array.forEach(function(currentValue,index,arr), thisValue)
2.map: array.map(function(currentValue,index,arr), thisValue)
3.filter: array.filter(function(currentValue,index,arr), thisValue)
5.$.each: $.each( object/array, function(index,elment) );//jQuery的遍历⽅法,这⾥先不多说
6.for/in: for (var key in object) { //... }
这些⽅法都是源于for的封装⽽来的,先来看看for是怎么循环⼀个数组的
var arr = [4,3,2,1];
var index = [];
var value = [];
var sum = 0;
for(var i=0;i
index.push(i);
value.push(arr[i])
sum += arr[i]
};
console.log(index); //[0, 1, 2, 3]
console.log(value); // [4,3,2,1]
console.log(sum); //10
//可以看出,i表⽰的是数组下标,arr[i]是通过下标来去的对应的值
forEach、map、filter、reduce⽅法相同点
**参数
console.log(sum);//10
**迭代时不做修改
这些⽅法处理数组时,数组元素的范围是在 callback ⽅法第⼀次调⽤之前就已经确定了。;若已经存在的元素被改变或删除了,则它们的传递到 callback 的值是 该⽅法遍历到它们的那⼀时刻的值;被删除的元素将不会被访问到。例如:
var words = ["one", "two", "three", "four"];
words.forEach(function(word) {
console.log(word);
if (word === "two") {
words.shift();
}
});
console.log(words);//["two", "three", "four"]
**兼容旧环境
这些⽅法都是ECMA5新增的数组⽅法,所以ie9以下都不⽀持,不过,可以从Array原型拓展从⽽实现以上全部功能,例如forEach⽅法:
if (typeof Array.prototype.forEach != "function") {
Array.prototype.forEach = function() {
/* 实现 */
};
}
下⾯来看看这⼏个⽅法不同的地⽅
定义:
forEach() forEach循环,循环数组中每⼀个元素并采取操作, 没有返回值, 可以不⽤知道数组长度
map函数,遍历数组每个元素,并回调操作,需要返回值,返回值组成新的数组,原数组不变
filter() 过滤通过条件的元素组成⼀个新数组, 原数组不变
reduce() ⽅法接收⼀个函数作为累加器,数组中的每个值(从左到右)开始缩减,最终计算为⼀个值
some函数,遍历数组中是否有符合条件的元素,返回Boolean值
forEachmapfilterreduce
操作
循环(迭代)
映射
过滤器
汇总
返回值
undefined
返回新数组
返回新数组
返回计算结果total
改变原数组?
看情况
检测空数组?
不检测
不检测
不检测
不检测
下⾯来看看这⼏个⽅法在应⽤中的不同:1.对当前数组每个元素乘于100
1.for⽅法
var b = [1,2,3];
var f = [];
for(var i=0;i
f.push(b[i]*100)
};
console.log(f); //[100, 200, 300] 2.forEach⽅法:
var b = [1,2,3];
var f = []
b.forEach(function(v){
f.push(v*100)
});
console.log(f); //[100, 200, 300] console.log(b); // [1, 2, 3]
2. forEach⽅法:
var b = [1,2,3];
b.forEach(function(item,index,arr){ arr[index] = item*100;
});
console.log(b); //[100, 200, 300]
3.map⽅法:
var b = [1,2,3];
var c = b.map(function(v){ return v*100} )
console.log(c); //[100, 200, 300]
4.for/in语句
var b = [1,2,3];
var f = [];
for(var k in b){
f.push(b[k]*100)
}
console.log(f); //[100, 200, 300]
filter过滤对象数组
2.对数组的求和
1.for循环
var arr = [1,2,3,4,5];
var sum = 0; //这⾥sum设置为0或null
for(i=0;i
sum += arr[i];
};
console.log(sum);//15
2.forEach⽅法
var arr = [1,2,3,4,5];
var sum = 0;
arr.forEach(function(v){
sum += v
})
console.log(sum);//15
3.map⽅法
//map不适合⽤来做和,因为他是对每个元素进⾏处理,再返回每个元素4.for/in语句
var arr = [1,2,3,4,5];
var sum = 0;
for(var k in arr){

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。