在 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>");