Javascript reduce() on Object

2022-08-30 00:47:20

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

[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()


答案 1

一个选项是键()reduce

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

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

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

答案 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