1 forEach 对数组的每个元素执行一次提供的函数。
var arr = [1, 2, 3];
arr.forEach(function (element, index, array) {
console.log(element, index, array)
})
// output
1 0 [ 1, 2, 3 ]
2 1 [ 1, 2, 3 ]
3 2 [ 1, 2, 3 ]
forEach方法还可以传入第二个参数,这个参数是可选的。如果给forEach传递了第二个参数,callback函数里的this将指向这个参数。
注意:如果是箭头函数形式,那么第二个参数改变指向这种操作是无效的,因为箭头函数没有自己的this,它的this是继承而来。
var arr = [1, 2, 3];
var obj = { a: 1 };
arr.forEach(function (element, index, array) {
console.log(element, index, array, this)
}, obj)
// output
1 0 [ 1, 2, 3 ] { a: 1 }
2 1 [ 1, 2, 3 ] { a: 1 }
3 2 [ 1, 2, 3 ] { a: 1 }
2 map
map方法的作用就是将原数组按照一定的规则映射成一个新的数组。再将其返回,是返回一个新的数组,而不是将原数组直接改变。使用方法和参数都跟forEach相似。
var arr= [1, 2, 3];
var arrayOfSquares = arr.map(function (element) {
return element * element; // 需要有return
});
console.log(arrayOfSquares); //[1, 4, 9]
3 filter 为“过滤”、“筛选”的意思。指数组filter后,返回过滤后的新数组。
var arr = [0, 1, 2, 3];
var newArr = arr.filter((it) => {
return it;
})
var newArr2 = arr.filter((it) => {
return it >= 2;
})
// var newArr2 = arr.filter(e => e >= 2) (简写,只有一个return语句时,将括号都去掉)
console.log(newArr); // [1, 2, 3]
console.log(newArr2); // [2, 3]
4 some (返回布尔值)
只要数组中的某个值,符合你给定的判断条件就返回true;否则,返回false。
var passed = [1, 2, 3].some(it => it >= 4);
var passed2 = [1, 2, 3, 4, 5].some(it => it >= 4); // 遍历到4就停止了,不会像foreach那样全部遍历完
console.log(passed); // false
console.log(passed2); // true
5 every (返回布尔值)
every方法与some方法相反,every方法是数组中的所有值都符合你给定的判断条件的时候才会返回true,否则就返回false。
var passed = [2, 3, 4].every(it => it >= 3);
var passed2 = [3, 4, 5].every(it => it >= 3);
console.log(passed); // false
console.log(passed2); // true
6 reduce
语法:
var sum = [1, 2, 3].reduce(function (prev, cur, index, arr) {
// ...
}, init);
arr 表示原数组;
prev 表示上一次调用回调时的返回值,或者初始值 init;
cur 表示当前正在处理的数组元素;
index 表示当前正在处理的数组元素的索引,若提供 init 值,则索引为0,否则索引为1;
init 表示初始值。
其实常用的参数只有两个:prev 和 cur。
(1)求数组之和
var sum = [1, 2, 3].reduce(function (prev, cur) {
return prev + cur;
});
console.log(sum);
(2)求数组项最大值
var max = [2, 3, 1, 5, 0].reduce(function (prev, cur) {
return Math.max(prev, cur);
});
console.log(max); // 5
(3)数组去重
var newArr = [1, 1, 2, 3, 3, 4].reduce((prev, cur) => {
prev.indexOf(cur) === -1 && prev.push(cur);
return prev;
}, []);
console.log(newArr); // [1,2,3,4]
reduceRight() 用法与reduce()相同,只是遍历的顺序相反,它是从数组的最后一项开始,向前遍历到第一项。