按键对JavaScript对象排序

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

因此:

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

将成为:

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

这个问题的其他答案已经过时,从未与实施现实相匹配,并且随着ES6/ES2015规范的发布,正式地变得不正确


请参阅Axel Rauschmayer在《探索ES6》中关于属性迭代顺序的章节:

所有在属性键上进行迭代的方法的顺序相同:

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

是的,JavaScript对象实际上是有序的,它们的键/属性的顺序可以改变

以下是如何按对象的键/属性按字母顺序对对象进行排序:

常量无序={
‘b’:‘foo’,
‘c’:‘bar’,
“a”:“baz”
};
log(JSON.stringify(无序));
// → '{“b”:“foo”,“c”:“bar”,“a”:“baz”}'
const ordered=Object.keys(无序).sort().reduce(
(对象,键)=>{
obj[键]=无序[键];
返回obj;
}, 
{}
);
log(JSON.stringify(ordered));
// → '{“a”:“baz”,“b”:“foo”,“c”:“bar”}

使用var而不是const与ES5发动机兼容

发表评论