如何在Javascript中使用groupBy对象?

如何在Javascript中使用groupBy对象?,javascript,arrays,object,group-by,Javascript,Arrays,Object,Group By,我有一个目标如下: obj = { 'fruita' : 'eat', 'fruitb' : 'eat', 'fruitc' : 'throw', 'fruitd' : 'throw' } output = { 'eat' : ['fruita','fruitb'], 'throw' : ['fruitc','fruitd'] } 如何应用u.groupBy来分别获取eat和throw水果列表?我们可以将对象转换为键值对数组: var keyValues = Object.key

我有一个目标如下:

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

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

如何应用u.groupBy来分别获取eat和throw水果列表?

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

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;
}, {});

没有必要

您可以在循环中使用
for..将
output
对象的属性设置为
obj
的值,将
obj
属性推送到
output

var obj={
‘水果’:‘吃’,
水果B:“吃”,
“水果C”:“扔”,
“水果”:“扔”
}
var输出={};
用于(obj中的var prop){
如果(!输出[obj[prop]]){
输出[obj[prop]]=[];
输出[obj[prop]]。推送(prop)
}否则{
输出[obj[prop]]。推送(prop)
}
}
console.log(输出)