array1.reduce(callbackfn[, initialValue])
参数 定义
array1 必需。一个数组对象。
callbackfn 必需。一个接受最多四个参数的函数。对于数组中的每个元素,reduce方法都会调用callbackfn函数一 次。
initialValue 可选。如果指定initialValue,则它将用作初始值来启动累积。第一次调用callbackfn函数会将此值作为参 数而非数组值提供。
通过最后一次调用回调函数获得的累积结果。
当满足下列任一条件时,将引发TypeError异常:
callbackfn参数不是函数对象。
数组不包含元素,且未提供initialValue。
ExceptionCondition
如果提供了initialValue,则reduce方法会对数组中的每个元素调用一次callbackfn函数(按升序索引顺序)。如果未提供initialValue,则reduce方法会对从第二个元素开始的每个元素调用callbackfn函数。
回调函数的返回值在下一次调用回调函数时作为previousValue参数提供。最后一次调用回调函数获得的返回值为reduce方法的返回值。
不为数组中缺少的元素调用该回调函数。
reduceRight 方法 (Array) (JavaScript)按降序索引顺序处理元素。
回调函数的语法如下所示:
function callbackfn(previousValue, currentValue, currentIndex, array1)
可使用最多四个参数来声明回调函数。
下表列出了回调函数参数。
回调参数 定义
previousValue 通过上一次调用回调函数获得的值。如果向reduce方法提供initialValue,则在首次调用函数时, previousValue为initialValue。
currentValue 当前数组元素的值。
currentIndex 当前数组元素的数字索引。
array1 包含该元素的数组对象。
在第一次调用回调函数时,作为参数提供的值取决于reduce方法是否具有initialValue参数。
如果向 reduce 方法提供initialValue:
previousValue参数为initialValue。
currentValue参数是数组中的第一个元素的值。
如果未提供initialValue:
previousValue参数是数组中的第一个元素的值。
currentValue参数是数组中的第二个元素的值。
数组对象可由回调函数修改。
下表描述了在reduce方法启动后修改数组对象所获得的结果。
reduce方法启动后的条件
元素是否传递给回调函数
在数组的原始长度之外添加元素。
否。
添加元素以填充数组中缺少的元素。
是,如果该索引尚未传递给回调函数。
元素被更改。
是,如果该元素尚未传递给回调函数。
从数组中删除元素。
否,除非该元素已传递给回调函数。
下面的示例将数组值连接成字符串,各个值用“::”分隔开。由于未向reduce方法提供初始值,第一次调用回调函数时会将“abc”作为previousValue参数并将“def”作为currentValue参数。
// Define the callback function.functionappendCurrent (previousValue, currentValue) {returnpreviousValue +"::"+ currentValue; }// Create an array.varelements = ["abc","def", 123, 456];// Call the reduce method, which calls the callback function// for each array element.varresult = elements.reduce(appendCurrent);document.write(result);// Output:// abc::def::123::456
下面的示例向数组添加舍入后的值。使用初始值 0 调用reduce方法。
// Define the callback function.functionaddRounded (previousValue, currentValue) {returnpreviousValue + Math.round(currentValue); }// Create an array.varnumbers = [10.9, 15.4, 0.5];// Call the reduce method, starting with an initial value of 0.varresult = numbers.reduce(addRounded, 0);document.write (result);// Output: 27
网友评论