如果我有這個JS對象常量:如何排序JS對象文字?
var foo = {
Sussy: 4,
Billy: 5,
Jimmy: 2,
Sally: 1
};
如何創建一個新的,分類對象文本:
var bar = {
Sally: 1,
Jimmy: 2,
Sussy: 4,
Billy: 5
};
如果我有這個JS對象常量:如何排序JS對象文字?
var foo = {
Sussy: 4,
Billy: 5,
Jimmy: 2,
Sally: 1
};
如何創建一個新的,分類對象文本:
var bar = {
Sally: 1,
Jimmy: 2,
Sussy: 4,
Billy: 5
};
回覆:如何排序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
修改於:更新代碼來解決錯字。謝謝@馬丁菲
+1我也喜歡第三個選項:) – 2011-06-07 15:55:56
感謝您讓我走上正確的軌道和所有細節。我會嘗試#3。 – edt 2011-06-08 15:18:40
@拉里克 - 幫我堵塞了。謝謝。 – dopatraman 2012-04-15 23:57:59
對象屬性是在沒有特定的順序(順序是依賴於實現)和您無法對屬性進行排序。
你必須保持鍵的排列,因此對它進行排序,例如:
var keys = [];
for(var key in obj) {
if(obj.hasOwnProperty(key)) {
keys.push(key);
}
}
keys.sort(function(a, b) {
return obj[a] - obj[b];
});
現在你可以遍歷數組的值,並用它們來訪問對象的相應屬性。
如你的問題你不能排序JS對象。不可能。爲什麼?因爲JS對象屬性沒有排序。切換到數組。數組是有序的,對象不是。 – 2011-06-07 15:21:24