跳转到主要内容
模块 6 · 第 2 课(共 4)课程中的22/32~12 min
模块课程(2/4)

减少

reduce 是功能最强大的数组方法:它遍历集合 保持一个在每一步更新的累加器。当循环结束时,返回 累加器。

签名

JS
arr.reduce((acc, elem) => nuovoAcc, valoreIniziale);
  • acc 从 valoreIniziale 开始。
  • 对于每个元素,计算一个新的 acc 。
  • 最终结果是最后一个acc。

基本示例:总和与积

JS
const numeri = [3, 1, 4, 1, 5];

const somma = numeri.reduce((a, n) => a + n, 0);
// 14

const prodotto = numeri.reduce((a, n) => a * n, 1);
// 60

如果没有初始值,reduce 从第一个元素开始(有可能为空的风险) 数组 → 错误)。 尽可能传递初始值。

构建对象:计数

JS
const parole = ['mela', 'pera', 'mela', 'kiwi', 'mela'];

const conteggio = parole.reduce((acc, p) => {
  acc[p] = (acc[p] ?? 0) + 1;
  return acc;
}, {});
// { mela: 3, pera: 1, kiwi: 1 }

寻找最大/最小

JS
const nums = [3, 7, 1, 9, 4];

const max = nums.reduce((a, n) => (n > a ? n : a), -Infinity);
// 9

(在实践中,最大/最小更喜欢 Math.max(...nums);这是一个教学示例。)

尝试一下

锻炼#js.m6.l2.e1
尝试:0加载中...

定义“total(items)”:您收到一个对象数组{价格,数量}并返回总支出(价格*数量之和)。使用减少。

正在加载编辑器...
显示提示

reduce((a, it) => a + it.price * it.quantity, 0)

3 次尝试后可用的解决方案

复习练习

锻炼#js.m6.l2.e2
尝试:0加载中...

定义“count(words)”:给定一个字符串数组,返回一个将每个字符串映射到出现次数的对象。将reduce 与对象累加器一起使用。

正在加载编辑器...
显示提示

acc[p] = (acc[p] ?? 0) + 1;返回帐户;

3 次尝试后可用的解决方案