我们可以在javascript中执行orders.stream().mapToInt(Order::getQuantity).sum())吗?

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

在java中,我使用流来计算订单列表的总和,如下所示:

orders.stream().mapToInt(Order::getQuantity).sum()

我想知道在迭代 Order 实例数组时是否有一种同样优雅的方法可以在 javascript 中执行此操作。 本质上是一个像这样的数组:

[{quantity: 10}, {quantity: 20}, {quantity: 15}, ...]

到目前为止我有类似的东西,但我想知道它是否可以更短:

  orders.map((order)=>order.quantity).reduce((a, b)=> a+b,0);
javascript ecmascript-6
2个回答
6
投票

您不需要使用

map
,只需:

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

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


0
投票

只是想强调一下,可以使用

orders.values()
来访问所提供的 Java 代码,它返回一个迭代器——类似于 Java 流的东西。然后我们可以链接迭代器辅助方法(在 ECMAScript 2025 中引入):

const add = (a, b) => a + b;
const getQuantity = o => o.quantity;


const orders = [{quantity: 10}, {quantity: 20}, {quantity: 15}];
const result = orders.values().map(getQuantity).reduce(add, 0);
console.log(result);

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