共计 1014 个字符,预计需要花费 3 分钟才能阅读完成。
reduce()
办法是 ES5 中新增的一个数组逐项解决办法, 对数组中的每个元素执行一个特定办法,并将其后果汇总为单个返回值。
Array.prototye.reduce ES5.1 标准
语法
arr.reduce(callback(accumulator, currentValue[, index[, array]])[, initialValue])
参数
-
callback : 执行数组中每个值的函数,它同时蕴含四个参数;
- accumulator(累计器): 累计回调的返回值,它是上次调用回调时返回的累积值,或 initialValue。
- currentValue: 正在解决的数组中的以后元素的值。
- index:可选,正在解决的数组中的以后元素的索引。
- array:可选,调用 reduce() 的数组。
- initialValue: 可选,作为第一次调用 callback 函数时的第一个参数的值。若没提供初始值,则将应用数组的第一个元素。若在没有初始值的空数组上调用 reduce 将报错。
返回值 :函数累计解决的后果。
reduce()
为数组中的每个元素顺次执行 callback 函数(数组中被删除或没赋值的元素除外 ).
回调函数第一次执行时,accumulator 和 currentValue 的取值有两种状况:
- 若调用
reduce()
时提供了 initialValue,则 accumulator 取值为 initialValue, currentValue 取数组中的第一个值; - 若调用
reduce()
时没有提供 initialValue,则 accumulator 取数组中的第一个值,currentValue 取数组中的第二个值。
reduce() 如何运行
如果运行如下代码:
[0, 1, 2, 3, 4].reduce(function(accumulator, currentValue, currentIndex, array){return accumulator + currentValue;});
callback 被调用四次,每次调用的参数和返回值如下表:
应用箭头函数:
[0, 1, 2, 3, 4].reduce((prev, curr) => prev + curr );
为 reduce()
的第二个参数提供 10 为初始值:
[0, 1, 2, 3, 4].reduce((accumulator, currentValue, currentIndex, array) => {return accumulator + currentValue}, 10)
正文完