JS数组遍历方法: map,filter,forEach...
2019-03-26 本文已影响0人
焦糖大瓜子
ECMAScript5 给数组定义了五个迭代方法:
- every();
对于数组中个每一项运行给定函数,如果函数的每一项都返回true, 则结果返回true
var nums = [10,3,5, 6,87];
var everyRet = nums.every(function(item, index, array){
console.log('item:'+ item, 'index:'+ index, 'array:'+ array.toString());
// item:10 index:0 array:10,3,5,6,87
// item:3 index:1 array:10,3,5,6,87
return item > 5;
});
console.log(everyRet); // false
- some();
对于数组中的每一项运行给定的函数,如果函数对任意一项返回true,则结果返回true
var nums = [10,3,5, 6,87];
var someRet = nums.some(function(item, index, array){
console.log('item:'+ item, 'index:'+ index, 'array:'+ array.toString());
// item:10 index:0 array:10,3,5,6,87
return item > 5;
});
console.log(someRet); // true
- filter();
对数组中的每一项运行给定函数,返回该函数会返回true的项组成的数组
var nums = [10,3,5, 6,87];
var filterRet = nums.filter(function(item, index, array){
console.log('item:'+ item, 'index:'+ index, 'array:'+ array.toString());
// item:10 index:0 array:10,3,5,6,87
return item > 5;
});
console.log(filterRet); // [10, 6, 87]
- forEach();
对数组的每一项运行给定的函数。无返回值
var nums = [10,3,5, 6,87];
var forEachRet = nums.forEach(function(item, index, array){
console.log('item:'+ item, 'index:'+ index, 'array:'+ array.toString());
});
console.log(forEachRet); // undefined
- map();
对数组的每一项运行给定函数,返回每次函数调用结果组成的数组
var nums = [10,3,5, 6,87];
var mapRet = nums.map(function(item, index, array){
if(item > 10){
return {item: item*2}
}
});
console.log(mapRet); // [undefined, undefined, undefined, undefined,item: 174]
- reduce();
对数组中的每个元素执行一个由您提供的reducer函数,将结果汇总为单个返回值;就是可以将很多元素归并到一个元素上。
// 先定义一个累加的函数
const array1 = [1, 2, 3, 4];
const reducer = (accumulator, currentValue) => accumulator + currentValue;
// 1 + 2 + 3 + 4
console.log(array1.reduce(reducer)); // 10
// 一种数组去重方法
let arr = [1,2,1,2,3,5,4,5,3,4,4,4,4];
let result = arr.sort().reduce((init, current) => {
if(init.length === 0 || init[init.length-1] !== current) {
init.push(current);
}
return init;
}, []);
console.log(result); //[1,2,3,4,5]
总结一下:
a.无返回值的遍历,使用forEach,
b.筛选符合条件的数组子项,使用filter
c. 对原数组编辑修改,使用map
d. every,some布尔类型校验时有用
e. reducer数组累加、去重
参考: 《JavaSrcipt高级程序设计》