按键对 JavaScript 对象进行排序
2022-08-29 22:29:46
我需要按键对JavaScript对象进行排序。
因此,以下是:
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
将变为:
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
我需要按键对JavaScript对象进行排序。
因此,以下是:
{ 'b' : 'asdsad', 'c' : 'masdas', 'a' : 'dsfdsfsdf' }
将变为:
{ 'a' : 'dsfdsfsdf', 'b' : 'asdsad', 'c' : 'masdas' }
这个问题的其他答案已经过时,永远无法匹配实现现实,并且现在已经正式变得不正确,因为ES6 / ES2015规范已经发布。
请参阅Axel Rauschmayer的Exploring ES6中有关属性迭代顺序的部分:
所有循环访问属性键的方法都按相同的顺序执行此操作:
- 首先是所有数组索引,按数字排序。
- 然后,所有字符串键(不是索引),按其创建顺序排列。
- 然后是所有符号,按其创建顺序排列。
所以,是的,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"}'
使用而不是与 ES5 引擎兼容。var
const
JavaScript 对象1 没有排序。试图对它们进行“排序”是毫无意义的。如果要循环访问对象的属性,可以对键进行排序,然后检索关联的值:
var myObj = {
'b': 'asdsadfd',
'c': 'masdasaf',
'a': 'dsfdsfsdf'
},
keys = [],
k, i, len;
for (k in myObj) {
if (myObj.hasOwnProperty(k)) {
keys.push(k);
}
}
keys.sort();
len = keys.length;
for (i = 0; i < len; i++) {
k = keys[i];
console.log(k + ':' + myObj[k]);
}
使用 Object.keys
fanciness 的替代实现:
var myObj = {
'b': 'asdsadfd',
'c': 'masdasaf',
'a': 'dsfdsfsdf'
},
keys = Object.keys(myObj),
i, len = keys.length;
keys.sort();
for (i = 0; i < len; i++) {
k = keys[i];
console.log(k + ':' + myObj[k]);
}
1 个不要迂腐,但是没有JSON对象这样的东西。