在javascript中按映射中的值排序
sorting by value in maps in javascript
我有一个具有多对一映射的对象:
{
'a' : 'one',
'b' : 'two',
'c' : 'one',
'd' : 'two'
}
现在我想从中制作以下对象:
{
'one' : ['a' , 'c'],
'two' : ['b' , 'd']
}
在javascript中最有效的方法是什么(如果有帮助,我们也可以使用下划线库)注意:以上对象只是实际问题的较短版本。
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);
您可以使用Object.keys()
和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)
好吧,这是我的方法。不过没有内纳德的先进。
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 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>");
相关文章:
- sort而不是排序javascript
- 我们如何自定义排序JavaScript对象键
- 以相同的方式对多个数组进行排序Javascript
- 重新排序 JavaScript 数组
- 比较和排序 JavaScript 数组
- 按特定顺序对数组进行排序 javascript
- 如何根据数组对对象进行排序 - javascript
- 组合然后排序Javascript数组.得到不可预测的结果
- 如何根据另一个数组的排序方式对一个数组进行排序?(Javascript)
- 如何更好地重新排序javascript代码
- 按对象属性排序javascript数组
- 递减While循环排序Javascript
- 累积求和/排序 JavaScript
- 按字母顺序排序javascript填充的选择列表
- 嵌套对象JSON排序JavaScript
- 排序javascript数组,使空白值总是在底部
- 基于任意长度的属性排序JavaScript对象数组
- 冒泡排序Javascript
- 按键值递归排序JavaScript对象
- 如何按日期排序javascript数组