ZetCode

JavaScript reduceRight 方法

最后修改于 2025 年 4 月 4 日

在本文中,我们将展示如何使用 JavaScript 中的 reduceRight 方法从右到左规约数组。

从右到左的数组规约

reduceRight 方法从右到左在每个数组元素上执行一个规约函数,从而产生单个输出值。它与 reduce 类似,但以相反的方向处理数组。

当操作顺序很重要时,此方法很有用,例如在处理数学表达式或嵌套函数调用时。reduceRight 方法维护一个累加器,该累加器会随着每次迭代而更新。

规约函数接受四个参数:累加器、当前值、当前索引和源数组。累加器累积回调的返回值。可以提供一个初始值作为 reduceRight 的第二个参数。

基本 reduceRight 示例

以下示例演示了 reduceRight 方法的基本用法,用于从右到左连接字符串。

main.js
const words = ['world', ' ', 'hello'];
const sentence = words.reduceRight((acc, word) => acc + word);

console.log(sentence);

我们创建一个单词数组,并使用 reduceRight 从右到左连接它们。累加器从最后一个元素 ('hello') 开始,并通过在每个后续元素之前添加它来构建字符串。

$ node main.js
hello world

使用 reduceRight 计算阶乘

reduceRight 方法可用于操作顺序很重要的数学运算。

main.js
const numbers = [1, 2, 3, 4];
const factorial = numbers.reduceRight((acc, num) => acc * num);

console.log(factorial);

我们通过从右到左乘以数字来计算 4 的阶乘。该操作等效于 4 * 3 * 2 * 1。使用 reduceRight 可确保乘法按正确的顺序进行。

$ node main.js
24

从右侧展平嵌套数组

reduceRight 方法可以从最右边的元素开始展平嵌套数组。

main.js
const nested = [[0, 1], [2, 3], [4, 5]];
const flattened = nested.reduceRight((acc, val) => acc.concat(val), []);

console.log(flattened);

我们从最右边的子数组开始展平嵌套数组。空数组 [] 被提供为初始值。每个子数组从右到左连接到累加器。

$ node main.js
[4, 5, 2, 3, 0, 1]

使用 reduceRight 组合函数

reduceRight 方法非常适合需要从右到左应用的函数组合。

main.js
const add5 = x => x + 5;
const multiply3 = x => x * 3;
const subtract2 = x => x - 2;

const operations = [add5, multiply3, subtract2];
const composed = operations.reduceRight((acc, fn) => fn(acc), 4);

console.log(composed);

我们组合了三个对数字进行运算的函数。这些函数从右到左应用于初始值 4。顺序是:减去 2,然后乘以 3,然后加上 5。

$ node main.js
17

使用 reduceRight 反转数组

reduceRight 方法可用于创建数组的倒序版本。

main.js
const letters = ['a', 'b', 'c', 'd'];
const reversed = letters.reduceRight((acc, letter) => [...acc, letter], []);

console.log(reversed);

我们通过从右到左累积元素来创建反转数组。展开运算符 ... 用于在每次迭代中创建一个新数组。空数组 [] 用作初始累加器。

$ node main.js
['d', 'c', 'b', 'a']

来源

数组 reduceRight - 语言参考

在本文中,我们演示了如何使用 reduceRight() 方法在 JavaScript 中从右到左处理数组。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。自 2007 年以来,我一直在撰写编程文章。迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出 所有 JS 数组函数。