有没有办法对 JavaScript 对象中的键进行排序/排序?

新手上路,请多包涵

例如以下

var data = {
    'States': ['NSW', 'VIC'],
    'Countries': ['GBR', 'AUS'],
    'Capitals': ['SYD', 'MEL']
}
for (var item in data) {
    console.log(item);
}

印刷

States
Countries
Capitals

有没有办法按字母顺序排序以便打印

Capitals
Countries
States

原文由 Hoa 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 259
2 个回答

不在对象本身内:对象的属性集合是无序的。

您可以做的一件事是使用 Object.keys() 并对数组进行排序,然后对其进行迭代。

 Object.keys(data)
      .sort()
      .forEach(function(v, i) {
          console.log(v, data[v]);
       });

不支持 ECMAScript 第 5 版的浏览器的补丁(实现):

原文由 user1106925 发布,翻译遵循 CC BY-SA 3.0 许可协议

这是一个很好的功能解决方案:

基本上,

  1. 将密钥提取到列表中 Object.keys
  2. sort
  3. 将列表缩减为一个对象以获得所需的结果

ES5 解决方案:

 not_sorted = {b: false, a: true};

sorted = Object.keys(not_sorted)
    .sort()
    .reduce(function (acc, key) {
        acc[key] = not_sorted[key];
        return acc;
    }, {});

console.log(sorted) //{a: true, b: false}

ES6 解决方案:

 not_sorted = {b: false, a: true}

sorted = Object.keys(not_sorted)
    .sort()
    .reduce((acc, key) => ({
        ...acc, [key]: not_sorted[key]
    }), {})

console.log(sorted) //{a: true, b: false}

原文由 mac 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏