数组求和 -Array reduce
reduce 用法
js
// 传统
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