如果我有这个JS对象文字:
var foo = {
Sussy: 4,
Billy: 5,
Jimmy: 2,
Sally: 1
};
如何创建新的已排序对象文字:
var bar = {
Sally: 1,
Jimmy: 2,
Sussy: 4,
Billy: 5
};
答案 0 :(得分:11)
Re:如何对JS对象进行排序?
答案:你不能。因此,您需要更复杂的数据结构。你有很多选择:
我推荐解决方案3,因为它使用JS机制来管理排序。
示例:
// Object holds sort order: (Solution 2)
var foo = {
Suzy: {v: 4, order: 0},
Billy: {v: 5, order: 1},
Jimmy: {v: 2, order: 2},
Sally: {v: 1, order: 3}
};
// Array holds keys: (Solution 3)
var woof = [
{k: 'Suzy', v: 4},
{k: 'Billy', v: 5},
{k: 'Jimmy', v: 2},
{k: 'Sally', v: 1}
];
// Sort the woof array by the key names:
woof.sort(function(a, b) {
return a.k.localeCompare(b.k);
});
// The third key and value:
woof[2].k; // the third key
woof[2].v; // the third value
编辑:更新代码以修复拼写错误。谢谢@Martin Fido
答案 1 :(得分:7)
对象属性没有特定的顺序(顺序依赖于实现),您无法对属性进行排序。
您必须保留一系列密钥并对其进行相应排序,例如:
var keys = [];
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
keys.push(key);
}
}
keys.sort(function(a, b) {
return obj[a] - obj[b];
});
现在,您可以迭代数组的值并使用它们来访问对象的相应属性。
答案 2 :(得分:1)
从ES2015开始,结果对象属性顺序是可预测的。太神奇了。