reduce的几个参数
array.reduce(function(prev, cur, index, arr), init)
·prev (上一次调用回调返回的值,或者是提供的初始值(initialValue))
·cur (数组中当前被处理的元素)
·index (当前元素在数组中的索引)
·arr (调用的数组)
·init (传递给函数的初始值)
累加器
let test1 = [1, 5, 32, 10]
let result1 = test1.reduce((pre, cur) => {
return pre + cur
})
// 48
加上初始值
let test1 = [1, 5, 32, 10]
let result1 = test1.reduce((pre, cur) => {
return pre + cur
},10)
// 58
对象属性求和
let test3 = [
{ subject: 'Chinese', score: 90 },
{ subject: 'Math', score: 92 },
{ subject: 'English', score: 85 }
];
let result3 = test3.reduce((pre, cur) => {
return cur.score + pre
}, 0)
// 267
去重
let test2 = [1, 2, 3, 1, 2, 4, 5]
let result2 = test2.reduce((pre, cur) => {
if (!(pre.includes(cur))) {
pre.push(cur)
}
return pre
}, [])
// [1, 2, 3, 4, 5]
元素出现次数
let test4 = ['A', 'B', 'C', 'B', 'B', 'C']
let result4 = test4.reduce((pre, cur) => {
pre[cur] ? pre[cur]++ : pre[cur] = 1
return pre
}, {})
// {A: 1, B: 3, C: 2}
分类
let test5 = [
{ type: 'Math', score: 10 },
{ type: 'Chinese', score: 2 },
{ type: 'English', score: 3 },
{ type: 'Math', score: 8 },
{ type: 'Chinese', score: 20 }
];
let result5 = test5.reduce((pre, cur) => {
if (!pre[cur.type]) {
pre[cur.type] = []
}
pre[cur.type].push(cur)
return pre
}, {})
// {
// "Math": [{
// "type": "Math",
// "score": 10
// }, {
// "type": "Math",
// "score": 8
// }],
// "Chinese": [{
// "type": "Chinese",
// "score": 2
// }, {
// "type": "Chinese",
// "score": 20
// }],
// "English": [{
// "type": "English",
// "score": 3
// }]
// }