使用动态键减少对象数组

Reduce Array of Objects with Dynamic Keys

这看起来应该很简单,但我的搜索没有找到任何结果。

我有一个对象数组,如下所示:

[{"A":4,"B":2},{"A":2,"B":1},{"A":3,"B":1},{"A":2,"B":1,"C":1}]

我想将它扁平化为如下所示(我认为是一个 reduce 函数):

{"A": 11, "B": 5, "C": 1}

对象的起始数组是一个更大更复杂的起始对象转换的产物。重要的细节是键本身是任意值(即您可能会看到“D”和“E”,但代码本身需要对此视而不见)。我已经使用 Underscore.js 达到了这一点,我希望找到同样简洁、功能型的解决方案。

获取 key/value 对并更新总和。

var data = [{ A: 4, B: 2 }, { A: 2, B: 1 }, { A: 3, B: 1 }, { A: 2, B: 1, C: 1 }],
    result = data.reduce((r, o) => (Object.entries(o).forEach(([k, v]) => r[k] = (r[k] || 0) + v), r), {});

console.log(result);