'让我说我有一个对象
var obj = {
apples: 2,
grapes: 1,
oranges:2,
carrots:2,
potatoes: 4
}
我如何编写一个快速执行的函数来返回按其值分组的键?
return {
"2": ['apples', 'oranges', 'carrots'],
"4" : ['potatoes'],
"1" : ['grapes']
}
答案 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;
}