reduce 方法 (Array) (JavaScript)
2016-08-25 18:47
507 查看
对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。
语法
参数
返回值
通过最后一次调用回调函数获得的累积结果。
异常
当满足下列任一条件时,将引发 TypeError 异常:
callbackfn 参数不是函数对象。
数组不包含元素,且未提供 initialValue。
备注
如果提供了 initialValue,则 reduce 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序)。如果未提供 initialValue,则reduce 方法会对从第二个元素开始的每个元素调用 callbackfn 函数。
回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 reduce 方法的返回值。
不为数组中缺少的元素调用该回调函数。
回调函数语法
回调函数的语法如下所示:
function callbackfn(previousValue, currentValue, currentIndex, array1)
可使用最多四个参数来声明回调函数。
下表列出了回调函数参数。
第一次调用回调函数
在第一次调用回调函数时,作为参数提供的值取决于 reduce 方法是否具有 initialValue 参数。
如果向 reduce 方法提供 initialValue:
previousValue 参数为 initialValue。
currentValue 参数是数组中的第一个元素的值。
如果未提供 initialValue:
previousValue 参数是数组中的第一个元素的值。
currentValue 参数是数组中的第二个元素的值。
修改数组对象
数组对象可由回调函数修改。
下表描述了在 reduce 方法启动后修改数组对象所获得的结果。
下面的示例将数组值连接成字符串,各个值用“::”分隔开。由于未向 reduce 方法提供初始值,第一次调用回调函数时会将“abc”作为 previousValue 参数并将“def”作为 currentValue 参数。
JavaScript
下面的示例向数组添加舍入后的值。使用初始值 0 调用 reduce 方法。
JavaScript
下面的示例向数组中添加值。 currentIndex 和 array1 参数用于回调函数。
JavaScript
下面的示例获取一个数组,该数组仅包含另一个数组中的介于 1 和 10 之间值。提供给 reduce 方法的初始值是一个空数组。
JavaScript
语法
array1.reduce(callbackfn[, initialValue])
参数
参数 | 定义 |
---|---|
array1 | 必需。一个数组对象。 |
callbackfn | 必需。一个接受最多四个参数的函数。对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次。 |
initialValue | 可选。如果指定 initialValue,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供。 |
通过最后一次调用回调函数获得的累积结果。
异常
当满足下列任一条件时,将引发 TypeError 异常:
callbackfn 参数不是函数对象。
数组不包含元素,且未提供 initialValue。
Exception | Condition |
---|
如果提供了 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 方法启动后的条件 | 元素是否传递给回调函数 |
---|---|
在数组的原始长度之外添加元素。 | 否。 |
添加元素以填充数组中缺少的元素。 | 是,如果该索引尚未传递给回调函数。 |
元素被更改。 | 是,如果该元素尚未传递给回调函数。 |
从数组中删除元素。 | 否,除非该元素已传递给回调函数。 |
JavaScript
// Define the callback function. function appendCurrent (previousValue, currentValue) { return previousValue + "::" + currentValue; } // Create an array. var elements = ["abc", "def", 123, 456]; // Call the reduce method, which calls the callback function // for each array element. var result = elements.reduce(appendCurrent); document.write(result); // Output: // abc::def::123::456
下面的示例向数组添加舍入后的值。使用初始值 0 调用 reduce 方法。
JavaScript
// Define the callback function. function addRounded (previousValue, currentValue) { return previousValue + Math.round(currentValue); } // Create an array. var numbers = [10.9, 15.4, 0.5]; // Call the reduce method, starting with an initial value of 0. var result = numbers.reduce(addRounded, 0); document.write (result); // Output: 27
下面的示例向数组中添加值。 currentIndex 和 array1 参数用于回调函数。
JavaScript
function addDigitValue(previousValue, currentDigit, currentIndex, array) { var exponent = (array.length - 1) - currentIndex; var digitValue = currentDigit * Math.pow(10, exponent); return previousValue + digitValue; } var digits = [4, 1, 2, 5]; // Determine an integer that is computed from values in the array. var result = digits.reduce(addDigitValue, 0); document.write (result); // Output: 4125
下面的示例获取一个数组,该数组仅包含另一个数组中的介于 1 和 10 之间值。提供给 reduce 方法的初始值是一个空数组。
JavaScript
function Process(previousArray, currentValue) { // If currentValue is between 1 and 10, // append currentValue to the array. var nextArray; if (currentValue >= 1 && currentValue <= 10) nextArray = previousArray.concat(currentValue); else nextArray = previousArray; // If this is not the last call by the reduce method, // the returned array is previousArray on the next call. // If this is the last call by the reduce method, the // returned array is the return value of the reduce method. return nextArray; } // Create an array. var numbers = [20, 1, -5, 6, 50, 3]; // Call the reduce method, starting with an initial empty array. var emptyArray = new Array(); var resultArray = numbers.reduce(Process, emptyArray); document.write("result array=" + resultArray); // Output: // result array=1,6,3
相关文章推荐
- 在JavaScript的ES5版本中Array数组的reduce方法详解
- reduce 方法 (Array) (JavaScript)
- JavaScript - reduce方法,reduceRight方法 (Array)
- javascript---数组array方法reduce()
- reduce 方法 (Array) (JavaScript)
- javaScript--数组(Array)的reduce方法解析
- javascript-reduce 方法 (Array)
- reduce 方法 (Array) (JavaScript)
- JavaScript——Array——reduce()方法应用
- JavaScript中Array 对象相关的几个方法
- Core Javascript1.6的Array方法扩展
- JavaScript中Array(数组)的属性和方法
- JavaScript 笔记二 Array和Date对象方法
- JavaScript中Array(数组)的属性和方法
- Javascript中Array的扩展方法
- 在Javascript中对Array的一些方法扩展,实现常用的查询处理。
- javascript 中 Array.sort()方法
- javascript 里Array的一些方法
- JavaScript Array 可以扩展的几个方法
- JavaScript中Array(数组)的属性和方法