JavaScript 数组(Array) 方法

reduceRight()方法和array.reduce() 方法相同,不过它是从数组的右侧开始计算,例如求和,找出数组的差异等。

语法

array.reduceRight(callback(accumulator,currentValue,currentIndex,array),initialValue)

参数

callback:它是在每个数组元素上执行的回调函数。它有以下4个参数:

  1. accumulator:累加回调函数的初始值或之前返回的值。
  2. currentValue:它保存当前正在处理的数组元素。
  3. currentIndex:它是可选的。它保存当前值的索引,正在处理中。
  4. array: 可选。它是元素所属的源数组。

initialValue: 它是一个可选参数,它使用其提供的值作为回调函数初始调用的累加器。

返回

它返回回调函数处理后的单个值。

注意事项:

  1. 当我们第一次调用回调函数时,accumulator 和 currentValue 可以是这两个值之一。
  2. 当我们在函数中提供initialValue时,累加器会保存initialValue的值,currentValue会保存数组的最后一个元素。
  3. 当没有提供 initialValue 时,accumulator 将保存最后一个数组元素,currentValue 将保存倒数第二个数组元素。
  4. 当存在没有初始值的空数组时,它会抛出一个称为 TypeError 的错误。
  5. 当它是一个没有initialValue的元素的数组或一个带有initialValue的空数组时,该元素将被返回而不调用回调函数。

方法示例

让我们看一些例子来更好地理解reduceRight()方法:

示例1

这里是 array.reduceRight() 方法的简单实现。

<html>
<head> <h5> JavaScript Array 方法</h5> </head>
<body>
<script>
var arr=[21,2,1,4];
var calc=arr.reduceRight(function(x,y){
return (x+y);
});
document.write("元素的总和为: " +calc);
</script>
</body>
</html>

输出:

元素的总和为: 28

但是,在上面的例子中,reduceRight() 方法是从右到左还是从右到左工作并不清楚。

示例2

这是一个显示 reduceRight() 方法工作方向的实现。

<html>
<head> <h5> JavaScript Array 方法</h5> </head>
<body>
<script>
var arr=['t','p','i','r','c','s','a','v','a','j'];
var res=arr.reduceRight(function(right, left){
return (right+left);
});
document.write("输出为: " +res);
</script>
</body>
</html>

输出:

输出为: javascript

因此,从上面的输出可以清楚地看出,reduceRight() 从右到左执行。

虽然 reduceRight() 和 reduce() 方法都将数组元素缩减为单个值,但它们之间还是有区别的。 reduce() 方法将数组元素从左侧索引位置减少到右侧。另一方面,reduceRight() 方法将数组元素从右索引位置向左减少。

让我们看看下面的实现以更好地理解。

示例3

<html>
<head> <h5> JavaScript Array 方法</h5> </head>
<body>
<script>
var arr=['t','p','i','r','c','s','a','v','a','j'];
var res1=arr.reduceRight(function(pos1, pos2){
	return (pos1+pos2);
});
var res2=arr.reduce(function(pos1, pos2){
	return (pos1+pos2);
});
document.write(" The reduceRight() method output is: " +res1+"<br>");
document.write("<br> The reduce() method output is: "+res2+ "<br>");
document.write("<br> <center>The above outputs shows that both method works in different manners<center>");
</script>
</body>
</html>

输出:

The reduceRight() method output is: javascript
The reduce() method output is: tpircsavaj