arr.reduce(function(prev,cur,index,arr){
// ...
},init);
- arr表示原数组;
- prev表示上一次调用回调时的返回值。或者初始值init;
- cur表示当前正在处理的效组元素;
- index表示当前正在处理的数组元素的索引,若提供init值,则索引为0,否则索引为1;
- init表示初始值。
这里说明一下:
- 如果有初始值init,则prev为init的值,cur为arr[0]
- 如果没有初始值init,则prev为arr[0],cur为arr[1]
常用的参数只有两个: prev和cur.
应用:
- 数组求和,求乘积
// 一、求和:
var arr = [1,2,3,4];
var res = arr.reduce((pre,cur) =>{
return pre + cur
})
console.log(res); //10
// 加入给了初始值2
var res = arr.reduce((pre,cur) =>{
return pre + cur
},2)
// 这里pre会变成init,cur变成arr[0],结果就是init + 1 + 2 + 3 + 4 = 12
console.log(res); //12
- 计算数组中每个元素出现的次数
// 计算数组中每个元素出现的次数
let person = ['张三','李四','王五','赵六','赵六'];
let res5 = person.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++;
}else{
pre[cur]=1;
}
return pre;
},{})
console.log(res5); //{ '张三': 1, '李四': 1, '王五': 1, '赵六': 2 }
- 数组去重
// 数组去重
var arr = [1,2,3,4,4,5,5,5,6,7,7];
let res6 = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){pre.push(cur)}
return pre
},[])
console.log(res6);
- 将二维数组转化成一维数组
- 将多维数组转化成一维数组
// 二、数组扁平化处理:
var arr2 = [1,[2,[3,4,5]]];
// var res2 = arr2.reduce((pre,cur)=>{
// if(Array.isArray(pre) ? )
// })
function fn(arr){
return arr.reduce((pre,cur)=>{
return pre.concat(Array.isArray(cur) ? fn(cur) : cur)
},[])
}
var res3 = fn(arr2);
console.log(res3); // [1,2,3,4,5]
- 对象里的属性求和