基础知识
arr.reduce(callback, [initialValue])
arr.reduce((prev, cur, index, arr) => {
...
}, [])
▲ callback,要执行的函数,要执行的函数也可传入参数,分别为
prev:上次调用函数的返回值
cur:当前元素
index:当前元素索引
arr:被遍历的数组
▲ 函数迭代的初始值
如果没有初始值,则reduce会将数组的第一个元素作为循环开始的初始值,第二个元素开始执行回调函数。
初级用法
1. 数组求和
let arr = [1,2,3,4,5]
const sum = arr.reduce((prev, cur) => {
return prev + cur
}, 0)
console.log(sum)
2.求数组中的最大值
let arr = [1,2,3,4,5]
const max = arr.reduce((prev, cur) => {
return Math.max(prev, cur)
}, 0)
console.log(max)
高级用法
1.计算数组中每个元素出现的次数
let arr = ['name','age','long','short','long','name','name']
let arrResult = arr.reduce((pre,cur) =>{
console.log(pre,cur)
if(cur in pre){
pre[cur]++
}else{
pre[cur] = 1
}
return pre
},{})
console.log(arrResult)
2.去除数组中重复的元素
let arr = ['name','age','long','short','long','name','name']
let newArr = arr.reduce((pre,cur) => {
if(!pre.includes(cur)) {
pre.push(cur)
}
return pre
},[])
console.log(newArr)
3.实现数组扁平化
let arr = [[0,1],[1,2],[2,3]]
let newArr = arr.reduce((pre,cur) => {
return pre.concat(cur)
},[])
console.log(newArr)
4.对象里的属性求和
const result = [
{
subject: 'math',
score: 10
},
{
subject: 'chinese',
score: 20
},
{
subject: 'english',
score: 30
}
];
let sum = result.reduce(function(prev, cur) {
return cur.score + prev;
}, 0);
console.log(sum)