这个方法接收两个参数:
要执行的函数,要执行的函数中也可传入参数,分别为
prev:上次调用函数的返回值
cur:当前元素
index:当前元素索引
arr:被遍历的数组
函数迭代的初始值
用法:
①、计算数组中每个元素出现的次数
let names = ['Alice', 'Bob', 'Tiff', 'Bruce', 'Alice'];
let nameNum = names.reduce((pre,cur)=>{
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(nameNum); //{Alice: 2, Bob: 1, Tiff: 1, Bruce: 1}
②、数组去重
let arr = [1,2,3,4,4,1]
let newArr = arr.reduce((pre,cur)=>{
if(!pre.includes(cur)){
return pre.concat(cur)
}else{
return pre
}
},[])
console.log(newArr);// [1, 2, 3, 4]
③、二维转一维
let arr = [[0, 1], [2, 3], [4, 5]]
let newArr = arr.reduce((pre,cur)=>{
return pre.concat(cur)
},[])
console.log(newArr); // [0, 1, 2, 3, 4, 5]
④、对象里属性求和
var result = [
{
subject: 'math',
score: 10
},
{
subject: 'chinese',
score: 20
},
{
subject: 'english',
score: 30
}
];
var sum = result.reduce(function(prev, cur) {
return cur.score + prev;
}, 0);
console.log(sum) //60
⑤、js 合并数组对象中的相同项,并统计数量和
let list=[
{
id:11,
name:'apple',
num:2
},
{
id:11,
name:'apple',
num:3
},
{
id:22,
name:'pig',
num:2
},
{
id:11,
name:'apple',
num:2
},
]
list = list.reduce((obj, item) => {
let find = obj.find(i => i.id === item.id)
let _d = {
...item,
frequency: 1
}
find ? (find.num+=item.num,find.frequency++ ): obj.push(_d)
return obj
}, [])
未来路还长,幸好路还长