迭代(遍历)方法:forEach()、map()、filter()、some()、every();
1.forEach()
var arr = [1, 2, 3]
var sum = 0;
arr.forEach(function (value, index, Array) {
console.log('数组元素' + value + '数组索引' + index);
sum += value;
})
console.log('数组和:' + sum);
运行结果:
2.filter()
filter() 方法创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素,主要用于筛选数组。
array.filter(function(value, index, arr){});
注意它直接返回一个新数组。arr可以省略。
eg:
var arr = [9, 12, 44, 66];
var newArr = arr.filter(function (value, index) {
return value >= 20; // 选出数组中大于20的元素
})
console.log(newArr); // [ 44, 66 ]
3.map()
var arr = [9, 12, 44, 66];
var newArr = arr.map(function (value, index) {
return value * 2; // 数组元素每个都乘2
})
console.log(newArr);//[ 18, 24, 88, 132 ]
4.some()
some() 方法用于检测数组中的元素是否满足指定条件。通俗点,查找数组中是否有满足条件的元素。
array.some(function(currentValue, index, arr){})
注意它返回值是布尔值, 如果查找到这个元素, 就返回true , 如果查找不到就返回false。
如果找到第一个满足条件的元素,则终止循环. 不在继续查找。
补充:在some 里面 遇到 return true 就是终止遍历。这可以用来返回其他的东西。
var arr = [9, 12, 44, 66];
var flag = arr.some(function (value) {
return value < 10;
});
console.log(flag);//true
5.every()
every()方法和some()差不多,它需要检测数组中的元素全部满足指定条件,它才返回true,
有一个不满足就返回false。
var arr = [9, 12, 44, 66];
var flag = arr.every(function (value) {
return value < 10;
});
console.log(flag);//false
注意:
1. filter 也是查找满足条件的元素 返回的是一个数组 而且是把所有满足条件的元素返回回来。
2. some 也是查找满足条件的元素是否存在 返回的是一个布尔值 如果查找到第一个满足条件的元素就终止循环。
区别:
forEach()、filter()、some()功能都有遍历迭代,但也是有区别的。
就列如:
var arr = ['red', 'green', 'blue', 'pink'];
arr.forEach(function (value) {
if (value == 'green') {
console.log('找到了该元素');
return true;
}
console.log(11);
})
输出结果:
(filter()和forEach()一样就不演示了)
我们发现:在forEach 和filter里面 return 不会终止迭代 。
而some():
var arr = ['red', 'green', 'blue', 'pink'];
arr.some(function (value) {
if (value == 'green') {
console.log('找到了该元素');
return true;
}
console.log(11);
});
运行结果:
所以some是找到第一个满足条件的元素,则终止循环. 不在继续查找。
因此 在some 里面 ,遇到 return true 就终止遍历,迭代效率更高。
如果查询数组中唯一的元素, 用some方法更合适。