任何人都可以向我解释更高级别的示例何时在 javascript 中使用 reduce() 方法

问题描述 投票:0回答:3

任何人都可以向我解释何时在 javascript 中使用 reduce() 方法的高级示例

javascript arrays object reduce
3个回答
1
投票

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),语法会更简单。但是,如果您用完了“更简单”的选项,它应该是您的首选武器。所以学习如何使用它!


0
投票

一个场景——电子商务购物车。您正在将商品添加到购物车并将它们存储在数组中。

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.


0
投票

“更高级别”是相对的,但如果您已经理解了 MDN

(和/或 javascript.info
上的)的reduce示例,那么JavaScript Allongé 有一些很好的使用示例
reduce 
在高阶函数中u2060—包括 函数式编程 的一些主要内容,如
compose
pipeline

© www.soinside.com 2019 - 2024. All rights reserved.