如何在Javascript中使用groupBy对象?

时间:2016-03-20 04:14:15

标签: javascript arrays object group-by

我有一个对象如下:

obj = {
 'fruita' : 'eat',
 'fruitb' : 'eat',
 'fruitc' : 'throw',
 'fruitd' : 'throw'
}

output = {
 'eat' : ['fruita','fruitb'],
 'throw' : ['fruitc','fruitd']
}

如何申请_.groupBy以获得单独吃饭和扔水果的清单?

2 个答案:

答案 0 :(得分:0)

我们可以将对象转换为键值对数组:

var keyValues = Object.keys(obj).map(key => ({ key, value: obj[key] }));

然后我们可以执行reduce来构造我们的对象:

var values = keyValues.reduce((acc, kv) => {
    if (typeof acc[kv.value] === 'undefined') {
        acc[kv.value] = [];
    }

    acc[kv.value].push(kv.key);
    return acc;
}, {});

不需要lodash!

答案 1 :(得分:0)

您可以使用for..in循环将output对象的属性设置为obj的值,将obj属性推送到output <内的数组中的项目/ p>

&#13;
&#13;
var obj = {
 'fruita' : 'eat',
 'fruitb' : 'eat',
 'fruitc' : 'throw',
 'fruitd' : 'throw'
}

var output = {};

for (var prop in obj) {
  if (!output[obj[prop]]) {
    output[obj[prop]] = [];
    output[obj[prop]].push(prop)
  } else {
    output[obj[prop]].push(prop)
  }
}

console.log(output)
&#13;
&#13;
&#13;