Menu
CoddyTech

Reduce 方法

本课属于 Coddy JavaScript 学习旅程的“逻辑与流程”单元。第 54 课,共 65 课。

reduce() 方法可以通过对数组中的每个元素执行指定的函数,将数组“归约”为单个值。这个值可以是数字、字符串、对象,甚至是另一个数组。

下面是归约器的语法:

array.reduce(function(accumulator, currentValue, currentIndex, array) {
    // 返回更新后的 accumulator 值
}, initialValue);

关键组成部分:

  1. 累加器:累积回调函数的返回值(可以把它看作不断变化的总计)
  1. currentValue:正在处理的数组元素
  1. currentIndex:(可选)当前元素的索引
  1. 数组:(可选)调用 reduce() 的数组
  1. 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
challenge icon

挑战

简单

创建一个名为 calculateGroceryTotal 的函数,该函数接收一个数组,数组中的对象代表杂货商品。

每个对象有两个属性:

  • name:字符串(商品名称)
  • price:数字(商品价格)

该函数应该:

  1. 计算所有商品的总价
  2. 应用折扣:如果总价超过 100,则打 9 折
  3. 如果总价超过 50 且小于或等于 100,则打 95 折
  4. 总价为 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
    };
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: JavaScript 在线编译器