任何人都可以向我解释何时在 javascript 中使用 reduce() 方法的高级示例
Reduce 是函数式数组方法的“瑞士军刀”,基本上你可以用 map 或 filter 做的所有事情都可以用 reduce 来完成(虽然需要更多的努力),但 reduce 也可以做很多其他的事情。
Reduce,就像 map 和 filter 一样“循环”遍历数组中的每个项目。它有一个累加器和一个当前值,你应该总是返回累加器的新值。
您可以将其视为 reducing 多个值(数组)为单个值,即累加器。
您可以为累加器设置一个初始值作为减少的第二个参数,或者不要这样做。如果你不这样做,数组中的第一个值将用作累加器的初始值。
关于使用 reduce 可以做的最简单的事情是计算数字数组的总和:
[1,2,3].reduce((a,c) => a + c)
但是如果你想创建一个新数组,那么从作为数组的累加器的初始值开始。在这里我们反转一个数组(也有一个内置的方法 - reverse - 我知道):
['here','are','some','words'].reduce((a,c) => a.unshift(c) && a, []);
基本上 reduce 几乎可以做任何其他数组方法可以做的事情,也可以做其他事情——取决于你的想象力/你正在解决的问题。这并不意味着您应该始终使用 reduce - 如果您可以使用 map、filter 或其他方法(如我上面示例中的 reverse),语法会更简单。但是,如果您用完了“更简单”的选项,它应该是您的首选武器。所以学习如何使用它!
一个场景——电子商务购物车。您正在将商品添加到购物车并将它们存储在数组中。
itemsInCart = [{name: "Shoes", quantity: 2, unitPrice: 10}, {name: "Hats", quantity: 7, unitPrice: 5}, {name: "Pants" quantity: 1, unitPrice: 14}]
你想计算总价——你可以在这种情况下使用reduce。
total = itemsInCart.reduce((total, item) => total + item.unitPrice * item.quantity, 0)
任何时候你使用
for
循环迭代一个数组并对它的值求和,你可以使用 reduce.
“更高级别”是相对的,但如果您已经理解了 MDN
(和/或 javascript.info上的)的
reduce
示例,那么JavaScript Allongé 有一些很好的使用示例reduce
在高阶函数中u2060—包括 函数式编程 的一些主要内容,如 compose
和 pipeline