按值字母顺序排序Javascript对象

5

I have a JS object as follows:

var obj = {"00:11:22:33:44:55" : "AddressB", "66:77:88:99:AA:BB" : "AddressA", "55:44:33:22:11:00" : "AddressC", "AA:BB:CC:DD:EE:FF" : "AddressD"};

以下是按键字母顺序对其进行排序的代码:
sorted = Object.keys(obj)
.sort()
.reduce(function (accSort, keySort) 
{
    accSort[keySort] = obj[keySort];
    return accSort;
}, {});

console.log(sorted);

如何将对象按值的字母顺序排序,以产生以下输出:

{"66:77:88:99:AA:BB" : "AddressA", "00:11:22:33:44:55" : "AddressB", "55:44:33:22:11:00" : "AddressC", "AA:BB:CC:DD:EE:FF" : "AddressD" }


5
虽然 ES6 已经指定了对象属性的顺序,但通常情况下如果顺序很重要,你不应该使用对象,而应该使用数组。请使用数组代替对象。 - Barmar
2个回答

9

你需要首先按其 valueskeys 进行排序,然后使用 .reduce 创建经过排序的结果对象:

const obj = {
  "00:11:22:33:44:55": "AddressB", 
  "66:77:88:99:AA:BB": "AddressA", 
  "55:44:33:22:11:00": "AddressC", 
  "AA:BB:CC:DD:EE:FF": "AddressD"
};

const sorted = Object.keys(obj).sort((a,b) => obj[a].localeCompare(obj[b]))
  .reduce((acc,key) => { acc[key] = obj[key]; return acc; }, {});

console.log(sorted);


3
使用Object.entries()可以获取一个二维数组,其中包含键和值。按照值进行排序,然后使用reduce()创建新对象。

var obj = {"00:11:22:33:44:55" : "AddressB", "66:77:88:99:AA:BB" : "AddressA", "55:44:33:22:11:00" : "AddressC", "AA:BB:CC:DD:EE:FF" : "AddressD"};

sorted = Object.entries(obj)
  .sort(([key1, val1], [key2, val2]) => val1.localeCompare(val2))
  .reduce(function(accSort, [key, val]) {
    accSort[key] = val;
    return accSort;
  }, {});

console.log(sorted);


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接