JavaScript - Array .reduceRight() 方法



在 JavaScript 中,Array.reduceRight() 方法将一个函数应用于累加器和数组中的每个元素(从右到左),以将其归约为单个值。

此方法不会为空数组元素执行 reducer 函数。此外,它不会修改原始数组。

注意 - 如果当前数组为空或不包含任何 initialValue,此方法将抛出'TypeError'异常。

reduce() 和 reduceRight() 之间的区别

reduce() 和 reduceRight() 方法几乎相同,但它们之间存在细微差别。reduce() 方法从左到右迭代数组,而 reduceRight() 方法从右到左迭代数组。

语法

以下是 JavaScript Array.reduceRight() 方法的语法:

reduceRight(callbackFn(accumulator, currentValue, currentIndex, array), initialValue)

参数

  • callbackFn - 这是要在数组的每个元素上执行的函数。此函数接受四个参数
    • accumulator - 这是 initialValue,或函数先前返回的值。
    • currentValue - 这是数组中正在处理的当前元素。如果指定了 initialValue,则其值为最后一个元素,否则其值为倒数第二个元素。
    • currentIndex (可选) - 这是数组中正在处理的当前元素的索引。
    • array (可选) - 这是调用 reduce() 方法的数组。
  • initialValue (可选) - 当第一次调用回调函数时,累加器参数初始化的值。

返回值

此方法返回单个值,该值是缩减数组后的结果。

示例

示例 1

在下面的示例中,reduceRight() 将数组元素从末尾加到开头,从最后一个元素开始,并使用累加器的初始值。

<html>
<body>
   <script>
      const numbers = [10, 20, 30, 40, 50];
      const sum = numbers.reduceRight((accumulator, currentValue) => accumulator + currentValue, 0);
      document.write(sum);
   </script>
</body>
</html>

输出

150

示例 2

在此示例中,reduceRight() 方法从数组的最后一个元素 (50) 和一个空数组作为累加器开始。它从右到左迭代,将每个元素推入累加器。

<html>
<body>
   <script>
      const numbers = [10, 20, 30, 40, 50];
      const reversedNumbers = numbers.reduceRight((accumulator, currentValue) => {
         accumulator.push(currentValue);
         return accumulator;
      }, []);
      document.write(reversedNumbers);
   </script>
</body>
</html>

输出

50,40,30,20,10

示例 3

在这里,reduceRight() 方法从最后一个嵌套数组 ([5, 6]) 和一个空数组作为累加器开始。它从右到左迭代,将每个数组连接到累加器。

<html>
<body>
   <script>
      const arrays = [[1, 2], [3, 4], [5, 6]];
      const flattenedArray = arrays.reduceRight((accumulator, currentValue) => accumulator.concat(currentValue), []);
      document.write(flattenedArray);
   </script>
</body>
</html>

输出

5,6,3,4,1,2

示例 4

如果当前数组不包含任何元素(没有可用的初始值),则 reduce() 方法将抛出“TypeError”异常。

<html>
<body>
   <script>
      const numbers = [];
      try {
         numbers.reduce((accumulator, currentValue) => accumulator * currentValue);
      } catch (error) {
         document.write(error);
      }
   </script>
</body>
</html>

输出

TypeError: Reduce of empty array with no initial value
广告