在 javascript 的地图中按值排序
sorting by value in maps in javascript
我有一个具有多对一映射的对象:
{
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
}
现在我想从中制作以下对象:
{
'one' : ['a' , 'c'],
'two' : ['b' , 'd']
}
在javascript中最有效的方法是什么(如果有帮助,我们也可以使用下划线库)
注意:以上对象只是实际问题的简化版本。
您可以使用 Object.keys()
and reduce
var data = {'a': 'one','b': 'two','c': 'one','d': 'two'}
var result = Object.keys(data).reduce((res, e) => {
res[data[e]] = (res[data[e]] || []).concat(e);
return res;
}, {});
console.log(result)
您也可以使用 forEach
并添加到创建的对象中
var data = {'a': 'one','b': 'two','c': 'one','d': 'two'}, r = {}
Object.keys(data).forEach(e => {r[data[e]] = (r[data[e]] || []).concat(e)});
console.log(r)
好吧,这是我的方法。虽然不如 Nenad 先进。
var obj = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
};
var result = {};
for (var i in obj) {
if (obj[i] in result) {
result[obj[i]].push(i);
} else {
result[obj[i]] = [i];
}
}
console.log(result);
var data = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
}
var result = {};
for(var key in data) {
var val = data[key];
if(!result[val]) result[val] = [];
result[val].push(key);
}
console.log(result);
单线
var map = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
},
reduced = Object.keys(map).reduce((p,c) => {!!p[map[c]] ? p[map[c]].push(c) : p[map[c]] = [c]; return p},{})
document.write("<pre>" + JSON.stringify(reduced) + "</pre>");
我有一个具有多对一映射的对象:
{
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
}
现在我想从中制作以下对象:
{
'one' : ['a' , 'c'],
'two' : ['b' , 'd']
}
在javascript中最有效的方法是什么(如果有帮助,我们也可以使用下划线库) 注意:以上对象只是实际问题的简化版本。
您可以使用 Object.keys()
and reduce
var data = {'a': 'one','b': 'two','c': 'one','d': 'two'}
var result = Object.keys(data).reduce((res, e) => {
res[data[e]] = (res[data[e]] || []).concat(e);
return res;
}, {});
console.log(result)
您也可以使用 forEach
并添加到创建的对象中
var data = {'a': 'one','b': 'two','c': 'one','d': 'two'}, r = {}
Object.keys(data).forEach(e => {r[data[e]] = (r[data[e]] || []).concat(e)});
console.log(r)
好吧,这是我的方法。虽然不如 Nenad 先进。
var obj = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
};
var result = {};
for (var i in obj) {
if (obj[i] in result) {
result[obj[i]].push(i);
} else {
result[obj[i]] = [i];
}
}
console.log(result);
var data = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
}
var result = {};
for(var key in data) {
var val = data[key];
if(!result[val]) result[val] = [];
result[val].push(key);
}
console.log(result);
单线
var map = {
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
},
reduced = Object.keys(map).reduce((p,c) => {!!p[map[c]] ? p[map[c]].push(c) : p[map[c]] = [c]; return p},{})
document.write("<pre>" + JSON.stringify(reduced) + "</pre>");