映射对象数组并在javascript中按键分组

Fuz*_*zed 0 javascript arrays object lodash

我怎样才能在javascript中简洁地实现以下操作:

[ {key:'a', value:1}, {key:'a', value:2}, {key:'b', value:4} ]
Run Code Online (Sandbox Code Playgroud)

- >

{'a':[1,2], 'b':[4] }
Run Code Online (Sandbox Code Playgroud)

代码简单是我真正想要的,我已经在使用lodash,但我无法弄清楚如何进行这种操作.

Doo*_*nob 5

尝试使用reduce:

var arr = [ {key:'a', value:1}, {key:'a', value:2}, {key:'b', value:4} ];

var obj = arr.reduce(function(acc, x) {
    if (!acc[x.key]) acc[x.key] = [];
    acc[x.key].push(x.value);
    return acc;
}, {});

document.write(JSON.stringify(obj));
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅MDN文档reduce.

如果你必须支持IE8或更低版本(没有reduce),你可以使用polyfill,或者你可以手动循环遍历数组并设置对象键(这看起来更丑).看起来lodash也已经有了reduce功能.