Reduce 方法
本课属于 Coddy JavaScript 学习旅程的“逻辑与流程”单元。第 54 课,共 65 课。
reduce() 方法可以通过对数组中的每个元素执行指定的函数,将数组“归约”为单个值。这个值可以是数字、字符串、对象,甚至是另一个数组。
下面是归约器的语法:
array.reduce(function(accumulator, currentValue, currentIndex, array) {
// 返回更新后的 accumulator 值
}, initialValue);关键组成部分:
- 累加器:累积回调函数的返回值(可以把它看作不断变化的总计)
- currentValue:正在处理的数组元素
- currentIndex:(可选)当前元素的索引
- 数组:(可选)调用 reduce() 的数组
- initialValue:(可选)作为回调函数第一次调用时的第一个参数使用的值
例如,数字之和:
const numbers = [1, 2, 3, 4, 5];
const sum = numbers.reduce((acc, curr) => acc + curr, 0);
console.log(sum); // 15逐步了解它的工作原理:
const numbers = [1, 2, 3, 4];
const sum = numbers.reduce((acc, curr) => {
console.log(`Accumulator: ${acc}, Current Value: ${curr}`);
return acc + curr;
}, 0);
// 输出:
// Accumulator: 0, Current Value: 1
// Accumulator: 1, Current Value: 2
// Accumulator: 3, Current Value: 3
// Accumulator: 6, Current Value: 4
// Final result: 10挑战
简单创建一个名为 calculateGroceryTotal 的函数,该函数接收一个数组,数组中的对象代表杂货商品。
每个对象有两个属性:
name:字符串(商品名称)price:数字(商品价格)
该函数应该:
- 计算所有商品的总价
- 应用折扣:如果总价超过 100,则打 9 折
- 如果总价超过 50 且小于或等于 100,则打 95 折
- 总价为 50 或更低时不打折。
返回一个包含以下内容的对象:
originalTotal:折扣前的总价discount:优惠金额finalTotal:折扣后的最终金额
亲手试试
function calculateGroceryTotal(items) {
// 在这里编写代码
return {
originalTotal: Math.round(originalTotal * 100) / 100, // 保留 2 位小数
discount: Math.round(discount * 100) / 100,
finalTotal: Math.round(finalTotal * 100) / 100
};
}这节课包含一个小测验。开始学习即可作答,并记录你的进度。
逻辑与流程中的所有课
自己练习: JavaScript 在线编译器