对象上的 Javascript reduce()

新手上路,请多包涵

有一个很好的数组方法 reduce() 可以从数组中获取一个值。例子:

[0,1,2,3,4].reduce(function(previousValue, currentValue, index, array){
  return previousValue + currentValue;
});

用对象实现相同目标的最佳方法是什么?我想这样做:

{
    a: {value:1},
    b: {value:2},
    c: {value:3}
}.reduce(function(previous, current, index, array){
  return previous.value + current.value;
});

但是,Object 似乎没有实现任何 reduce() 方法。

原文由 Pavel S. 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 999
2 个回答

在这种情况下,您真正想要的是 Object.values 。考虑到这一点,这是一个简洁的 ES6 实现:

 const add = {
 a: {value:1},
 b: {value:2},
 c: {value:3}
 }

 const total = Object.values(add).reduce((t, {value}) => t + value, 0)

 console.log(total) // 6

或者简单地说:

 const add = {
 a: 1,
 b: 2,
 c: 3
 }

 const total = Object.values(add).reduce((t, n) => t + n)

 console.log(total) // 6

原文由 Daniel Bayley 发布,翻译遵循 CC BY-SA 4.0 许可协议

一种选择是 reduce keys()

 var o = {
    a: {value:1},
    b: {value:2},
    c: {value:3}
};

Object.keys(o).reduce(function (previous, key) {
    return previous + o[key].value;
}, 0);

有了这个,您需要指定一个初始值,否则第一轮将是 'a' + 2

如果您希望结果作为对象( { value: ... } ),则每次都必须初始化并返回对象:

 Object.keys(o).reduce(function (previous, key) {
    previous.value += o[key].value;
    return previous;
}, { value: 0 });

原文由 Jonathan Lonowski 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题