我需要按键对JavaScript对象进行排序
因此:
{'b':'asdsad','c':'masdas','a':'dsfdsfsdf'}
将成为:
{'a':'dsfdsfsdf','b':'asdsad','c':'masdas'}
这个问题的其他答案已经过时,从未与实施现实相匹配,并且随着ES6/ES2015规范的发布,正式地变得不正确
请参阅Axel Rauschmayer在《探索ES6》中关于属性迭代顺序的章节:
所有在属性键上进行迭代的方法的顺序相同:
- 首先是所有数组索引,按数字排序
- 然后按创建顺序创建所有字符串键(不是索引)
- 然后是所有符号,按照它们被创建的顺序
是的,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发动机兼容