跳到主要内容

数组求和 -Array reduce

reduce 用法

// 传统
function sum1(arr) {
let res = 0
arr.forEach(n => res = res + n)
return res
}

const arr = [1, 2, 3, 4, 5]
console.log(sum1(arr)) // 15

// reduce 用法
const sum2 = arr.reduce((sum2, curVal, index, arr) => {
console.log('reduce funciton...')
console.log('sum2', sum2) // 0 1 3 6 10 15
console.log('curVal', curVal) // 1 2 3 4 5
console.log('index', index) // 0 1 2 3 4
console.log('arr', arr) // [1, 2, 3, 4, 5]

// 返回值,作为下一次执行时的第一个参数 sum2 的值
return sum2 + curVal
}, 0) // 0 初始值

console.log(sum2) // 15

// 简写
const sum3 = arr.reduce((sum3, curVal) => sum3 + curVal, 0)
console.log(sum3) // 15

// 计数
const arr2 = [1, 2, 3, 4, 5, 1, 2, 3, 2]
const count = arr2.reduce((count, val) => {
return val === 2 ? count + 1 : count
}, 0)
console.log(count) // 3

// 输出字符串
const arr3 = [
{name: '张三', age: 20},
{name: '李四', age: 21},
{name: '小明', age: 22},
]
const str1 = arr3.map(item => {
return `${item.name}-${item.age}`
}).join('\n')
console.log(str1)
// 张三-20
// 李四-21
// 小明-22
const str2 = arr3.reduce((s, item) => {
return `${s}${item.name}-${item.age}\n`
}, '')
console.log(str2)
// 张三-20
// 李四-21
// 小明-22