按键排序 JavaScript 对象

新手上路,请多包涵

我需要按键对 JavaScript 对象进行排序。

因此如下:

{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }

会成为:

{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }

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

阅读 517
1 个回答

这个问题的其他答案已经过时,从不符合实际实现,并且在 ES6 / ES2015 规范发布后 正式 变得不正确。


请参阅 Axel Rauschmayer 在 Exploring ES6 中关于 属性迭代顺序 的部分

遍历属性键的所有方法都以相同的顺序进行:

  1. 首先是所有数组索引,按数字排序。
  2. 然后是所有字符串键(不是索引),按照它们的创建顺序。
  3. 然后是所有符号,按照它们创建的顺序。

所以是的,JavaScript 对象 实际上 是有序的,并且它们的键/属性的顺序可以更改。

以下是您可以按字母顺序按键/属性对对象进行排序的方法:

 const unordered = {
  'b': 'foo',
  'c': 'bar',
  'a': 'baz'
};

console.log(JSON.stringify(unordered));
// → '{"b":"foo","c":"bar","a":"baz"}'

const ordered = Object.keys(unordered).sort().reduce(
  (obj, key) => {
    obj[key] = unordered[key];
    return obj;
  },
  {}
);

console.log(JSON.stringify(ordered));
// → '{"a":"baz","b":"foo","c":"bar"}'

使用 var 而不是 const 以与 ES5 引擎兼容。

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

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