在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);
您不需要使用
map
,只需:
orders.reduce((a, b) => a + b.quantity, 0));
console.log([{
quantity: 10
}, {
quantity: 20
}, {
quantity: 15
}].reduce((a, b) => a + b.quantity, 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);