通俗讲就是:forEach() 是中心,一般只能遍历,其他的则是当想改变数组的时候用map,想对数组进行过滤用filter,累加数组用reduce。 说白点,就是一个源码,之后延伸的判断filter() 赋值map() 累加合并归纳的reduce()
Array.prototype.forEach(callback)
数组的每一个元素执行一次提供的函数。回调函数callback
1.currentValue 当前元素
2.[index] 当前元素的索引值
3.array 当前数组
var arr = [1,2,3,4,5];
var newarr = arr.forEach(function(x){
return x > 1;
});
console.log(newarr,arr); //undifined //1 2 3 4 5
var arr = [1, 2, 3, 4, 5];
var newarr = arr.forEach(function (x) {
console.log(x)
});
console.log(newarr, arr);
//1
//2
//3
//4
//5
// 1 2 3 4 5
Array.prototype.map(callback)
创建一个新的数组,其结果是该数组中每个元素都调用一个提供的函数后返回的结果。(通俗说就是赋值) var arr = [1, 2, 0, 4, 5];
var newarr = arr.map(function (x) {
return x += 1;
});
console.log(newarr, arr);
// 2,3,1,5,6 //arr 1,2,0,4,5
Array.prototype.filter(callback)
创建一个新数组,其结果是调用一个函数后过滤得的元素。 (通俗讲就是判断) var arr = [1, 2, 0, 4, 5];
var newarr = arr.filter(function (x) {
return x > 1;
});
console.log(newarr, arr);
//newarr 2,4,5 //arr 1,2,0,4,5
和map的区分
var arr = [1, 2, 0, 4, 5];
var newarr = arr.map(function (x) {
return x > 1;
});
console.log(newarr, arr);
//fasle true false true true true //arr 1,2,0,4,5
Array.prototype.reduce()
接受一个函数作为累加器,依次加上数组的当前元素。官方点的解释
当initialValue存在
参数为:
accumulator: 累加器,初始值为initialValue的值
item:数组的当前项,从第0项开始
index:数组的当前项对应的下标,从0开始
array:数组本身
当initialValue不存在
参数为:
accumulator: 累加器,初始值为数组第0项
item:数组的当前项,因为 accumulator为第0项,所以这里从1开始
index:数组的当前项对应的下标,从1开始
array:数组本身
简单点的解释
array.reduce(callback[,object])
回调函数
第一种情况没有 object
prev 上一个
next 下一个
var arr = [0, 1, 2, 3, 4,5];
var a = arr.reduce(function (prev, next) {
return prev + next;
});
console.log(a);
//0+1
//1+2
//3+3
//6+4
//10+5 =>15
如果参数中传入了object
object 传入的对象
current 数组中的每个元素
描述:用于对数组进行归纳合并操作
var arr = [56, 23, 44, 55, 67, 88, 22];
var result = arr.reduce(function (obj, current) {
// console.log(obj, current);
current % 2 ? obj.odd++ : obj.even++;
obj.sum += current;
return obj;
}, { even: 0, odd: 0, sum: 0 })
console.log(result);