reduceRight()
方法和array.reduce() 方法相同,不过它是从数组的右侧开始计算,例如求和,找出数组的差异等。
语法
array.reduceRight(callback(accumulator,currentValue,currentIndex,array),initialValue)
参数
callback:它是在每个数组元素上执行的回调函数。它有以下4个参数:
- accumulator:累加回调函数的初始值或之前返回的值。
- currentValue:它保存当前正在处理的数组元素。
- currentIndex:它是可选的。它保存当前值的索引,正在处理中。
- array: 可选。它是元素所属的源数组。
initialValue: 它是一个可选参数,它使用其提供的值作为回调函数初始调用的累加器。
返回
它返回回调函数处理后的单个值。
注意事项:
- 当我们第一次调用回调函数时,accumulator 和 currentValue 可以是这两个值之一。
- 当我们在函数中提供initialValue时,累加器会保存initialValue的值,currentValue会保存数组的最后一个元素。
- 当没有提供 initialValue 时,accumulator 将保存最后一个数组元素,currentValue 将保存倒数第二个数组元素。
- 当存在没有初始值的空数组时,它会抛出一个称为 TypeError 的错误。
- 当它是一个没有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