我们可以用javascript编写orders.stream().mapToInt(Order::getQuantity.sum())吗?

我们可以用javascript编写orders.stream().mapToInt(Order::getQuantity.sum())吗?,javascript,ecmascript-6,Javascript,Ecmascript 6,在java中,我使用streams计算如下顺序列表的总和: orders.stream().mapToInt(Order::getQuantity).sum() [{quantity: 10}, {quantity: 20}, {quantity: 15}, ...] 我想知道在javascript中迭代Order实例数组时是否有同样优雅的方法来实现这一点。基本上是这样一个数组: orders.stream().mapToInt(Order::getQuantity).sum() [{qu

在java中,我使用streams计算如下顺序列表的总和:

orders.stream().mapToInt(Order::getQuantity).sum()
[{quantity: 10}, {quantity: 20}, {quantity: 15}, ...]
我想知道在javascript中迭代Order实例数组时是否有同样优雅的方法来实现这一点。基本上是这样一个数组:

orders.stream().mapToInt(Order::getQuantity).sum()
[{quantity: 10}, {quantity: 20}, {quantity: 15}, ...]
到目前为止,我有类似的东西,但我想知道它是否可以更短:

  orders.map((order)=>order.quantity).reduce((a, b)=> a+b,0);

您不需要使用
map
只需执行以下操作:

orders.reduce((a, b) => a + b.quantity, 0));
console.log([{
数量:10
}, {
数量:20
}, {
数量:15

}].减少((a,b)=>a+b.数量,0)是的,只需查看
数组的api即可。有
map
reduce
等可以获得类似的结果。您编辑了您的问题,添加了
数组
调用的用法,我认为这主要涵盖了它。这些调用提供了基本的构建块,但不如Java streams api.Hah丰富(或高效)。在某个地方应该有一个“使用
reduce
”常见问题解答“使您的代码更聪明、可读性更低”。当使用
reduce()
方法时,应该知道,正如它的名字所暗示的,它会将您的数组缩减为单个值<代码>累加器+当前值[属性]
,初始值为
0
。对我来说,它相当可读。我认为它的可读性很差。当然,在实践中,如果您编写js,您将熟悉
reduce
习惯用法。不过,评论大多是开玩笑的。我想你也可以初始化一个局部变量并
forEach
它。当然可读性很重要,可能类似于
orders.reduce((sum,order)=>sum+order.quantity,0))就可以了。代码可能会在之后被混淆。太棒了-我非常喜欢上一个版本的可读性因素-所有的评论都很棒!