reduce() 方法
JavaScript 中的 reduce() 方法可对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:
array.reduce(callbackfn[, initialVaule]);
参数说明:
- array:必需参数,一个数组对象。
- callbackfn:必需参数,一个接受最多四个参数的函数。对于数组中的每个元素,recude() 方法都会调用 callbackfn 函数一次。
- initialVaule:可选参数,如果指定 initialVaule,则它将用作初始值来启动累积。第一次调用 callbackfn 函数会将此值作为参数而非数组值提供。
recude() 方法的返回值是通过最后一次调用回调函数获得的累积结果。
如果提供了参数 initialVaule,则 reduce() 方法会对数组中的每个元素调用一次 callbackfn 函数(按升序索引顺序);如果为提供 initialVaule,则 reduce() 方法会对从第 2 个元素开始的每个元素调用 callbackfn 函数。
回调函数的返回值在下一次调用回调函数时作为 previousValue 参数提供。最后一次调用回调函数获得的返回值为 recude() 方法的返回值。该方法不为数组中缺少的元素调用该回调函数。
回调函数的语法如下:
function callbackfn(previousValue, currentVaule, currentIndex, array);
回调函数参数说明:
- previousValue:通过上一次调用回调函数获得的值。如果向 reduce() 方法提供 initialValue,则在首次调用函数时,previousValue 为 initialValue。
- currentVaule:当前元素数组的值。
- currentIndex:当前数组元素的数字索引。
- array:包含该元素的数组对象。
在第一次调用回调函数时,作为参数提供的值取决于 reduce() 方法是否具有 initialValue 参数。如果向 recude() 方法提供 initialValue,则 previousValue 参数为 initialValue,currentValue 参数是数组中第 1 个元素的值。
如果未提供 initialValue,则 previousValue 参数是数组中的第 1 个元素的值,currentValue 参数是数组中的第 2 个元素的值。
示例1
下面示例演示将数组值连接成字符串,各个值用::
分隔开。由于未向 recude() 方法提供初始值,第一次调用回调函数时会将“abc”作为 previousValue 参数,并将“def”作为 currentValue参数。
function f(pre, curr) { return pre + ": :" + curr; } var a = ["abc", "def", 123, 456]; var r = a.recude(f); console.log(r); //abc::def::123::456
示例2
下面示例向数组中添加值。currentIndex 和 array 参数用于回调函数。
function f(pre, curr, i, array) { var e = (array.length - 1) - i; var d = curr * Math.pow(10, e); return pre + d; } var a = [4,1,2,5]; var r = a.recude(f, 0); console.log(r); //4125
示例3
下面示例获取一个数组,该数组仅包含另一个数组中的介于 1 和 10 之间的值,提供给 recude() 方法的初始值是一个空数组。
function f(pre, curr) { var next; if (curr >= 1 && curr <= 10) { next = pre.concat(curr); } else { next = pre; } return next; } var a1 = [20,1,-5,6,50,3]; var a = new Array(); var r = a1.recude(f, a); console.log(r); //1,6,3
recudeRight() 方法
JavaScript 中的 recudeRight() 方法可从右向左对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。具体用法如下:
array1.reduceRight(callbackfn[, initialValue]);
该方法的语法和用法与 reduce() 方法大概相同,唯一不同的是,它是从数组右侧开始调用回调函数。如果提供了 initialValue,则 reduceRight() 方法会按降序索引顺序对数组中的每个元素调用一次 callbackfn 函数。如果未提供 initialValue,则 reduceRight() 方法会按降序索引顺序对每个元素(从倒数第 2 个元素开始)调用 callbackfn 函数。
示例4
下面示例使用 reduceRight() 方法,以::
为分隔符,从右到左把数组元素的值连接在一起。
function f (pre, curr) { return pre + "::" + curr; } var a = ["abc", "def", 123, 456]; var r = a.recudeRight(f); console.log(r); //456::123::def::abc
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/23120.html