使用javascript对象中相同数值对键进行分组的最快方法?

时间:2015-05-14 03:43:00

标签: javascript jquery

'让我说我有一个对象

var obj = {
   apples: 2,
   grapes: 1,
   oranges:2,
   carrots:2,
   potatoes: 4
}

我如何编写一个快速执行的函数来返回按其值分组的键?

return {
    "2": ['apples', 'oranges', 'carrots'],
    "4" : ['potatoes'],
    "1" : ['grapes']

}

3 个答案:

答案 0 :(得分:6)

您可以使用简单的for..in来实现此目的:

var obj = {
   apples: 2,
   grapes: 1,
   oranges:2,
   carrots:2,
   potatoes: 4
};

var result = {};
for(var key in obj) {
   if(!(obj[key] in result)) result[obj[key]] = [];
   result[obj[key]].push(key);
}

console.log(result);

答案 1 :(得分:1)

与for循环相比,快速而肮脏的函数方法很有趣:

var obj = {
   apples: 2,
   grapes: 1,
   oranges:2,
   carrots:2,
   potatoes: 4
};

Object.keys(obj).reduce(function(a,b,k){ 
  return (a[k=obj[b]]||(a[k]=[])).push(b), a;
},{});

没有更少的构建和拆除,但总体效果是相同的,for循环可能更具可读性。无论哪种方式,当面对多种情况时,至少知道reduce()是好的...

答案 2 :(得分:0)

for循环,但使用不同的语法,如下所示little more faster(在chome& IE中)

function convert3(obj) {
    var ret = {}, arr;
    for (var key in obj) {
        arr = ret[obj[key]];
        if (!arr) {
            arr = ret[obj[key]] = [];
        }
        arr.push(key)
    }
    return ret;
}