什么是 reduce() 方法
reduce() 方法是 JavaScript 中 Array 原型对象上的方法之一。它用于在数组中执行聚合操作。reduce() 方法传递一个函数作为一个累加器来处理数组元素,并将多个数组元素最终化作单个值。
reduce() 方法的语法
reduce() 的语法如下:
array.reduce(callback[, initialValue])
其中,callback
是一个用来执行对数组中每个元素的处理过程以及计算最终结果的函数,initialValue
是可选的,原始值,如果提供则它作为函数的第一个参数传递给 callback
函数。
callback
函数可以传入四个参数:
accumulator:累计器累计回调的返回值,它是上一次调用回调时返回的累积值,或者是调用 reduce 时提供的初始值(initialValue)。
currentValue:当前元素。如果要使用它的值作为下一次回调的 accumulator,就必须给出初始值。
currentIndex:(可选)当前元素在数组中的下标。
array:(可选)进行操作的数组。
callback
函数必须返回一个累加器的值。最终值是 reduce() 方法执行完之后的累加器的值。
reduce() 方法的应用场景
数组求和
const arr = [1, 2, 3, 4]; const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue, 0); console.log(sum); //10
数组寻找最大值
const arr = [1, 5, 2, 6, 3]; const max = arr.reduce((accumulator, currentValue) => accumulator > currentValue ? accumulator : currentValue, 0); console.log(max); //6
数组对象属性求和
const arr = [{ value: 1 }, { value: 2 }, { value: 3 }]; const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue.value, 0); console.log(sum); //6
reduce() 方法的优化
初始值问题
在使用
reduce()
方法时,一个重要的细节是,你必须指定一个初始值。如果初始值没有被指定,那么reduce()
方法会将数组的第一个元素作为“累计器”的初始值。由于这种行为通常不是我们所想要的,因此一定要明确提供初始值。const arr = [1, 2, 3, 4]; const sum = arr.reduce((accumulator, currentValue) => accumulator + currentValue); //错误示例,没有提供初始值 console.log(sum); //10
并行化操作
在 JavaScript 内建的
reduce()
方法中,每个元素只会依次调用一次回调函数。这意味着,如果我们需要对大量元素进行累积计算,比如数组中有 10000 个元素,那么它将不可避免地导致性能问题。一种常见的并行化操作的技巧是,将一个大数组切分成多个小数组,然后每个小数组都使用
reduce()
新建一个额外的累加器值,最后再将每个小数组的累加器值合并起来。-- -------------------- ---- ------- ----- --- - ------------ ------- ----- -- --- -- -- --- ------- ----- ------ ----- -------------- - ----- --------- ------------- -------- -- - ----- --------- - -------------------- - --------- ----- ------ - ------------ ------- ------- -- --- -- -- ----------- - ---------- -- - -- - ------------ ----- ----------- - ----- -- ---------------------- -------------- ------ ---------------------------------------- -------------- -- ----- --- - ------------------- ------------- ------------- -- ----------- - ------------- -- --- ----------------- ----------
结论
reduce()
方法是 JavaScript 提供的强大工具之一。与其他常用的 Array 原型方法,例如 map() 和 filter() 方法相比,它不仅可以在单个值上操作数组,还可以将数组的元素转换成单个值,非常适合用于聚合操作。即便在大规模数据的计算情况下,它的运行速度也非常快。但在使用时,需要注意初始值的问题。
来源:JavaScript中文网 ,转载请注明来源 https://www.javascriptcn.com/post/670772a2d91dce0dc868aa9c