最初我有這個問題,雖然數據集是正確的,依賴於JavaScript中的排序就數組而言是不正確的,所以我的解決方案是這樣的,只要返回的JSONChrome陣列排序不正確VS其他瀏覽器
var json = { //Returned from a database
data: {
_0: {key1: val1, key2: val2},
_1: {key1: val1, key2: val2},
...etc etc etc
}
};
var new_arr = [];
for(var i = 0; i < Object.keys(json.data).length; i++) {
var obj = json.data["_"+i];
new_arr.push(obj);
}
console.log(new_arr);
在IE8-11,火狐,歌劇(或任何其他瀏覽器),這表現爲你所期望的。按照返回的原始json對象中的鍵保存順序。然而,鉻,卻使這無序地濫用。數組未按預期順序排列。例如,在至少一個案例中,「_36」出現在console.log
的「_0」之前,則另一個密鑰任意亂序。
請記住JSON對象正確返回。這只是重新排序對象的data
元素未被正確推入陣列。我錯過了什麼?
注1:_0
et al中的鍵/值配對。沒有關係。這不是問題所在。它與我一起運行一個循環,並且數組沒有按照正確的順序。
注2:循環是正確的。它以正確的順序訪問json.data的屬性。問題是他們沒有以正確的順序進入數組。
目前沒有什麼規範,指出鍵的順序遍歷,所以它不是「不正確」。將來可能會改變。 – TbWill4321
JSON不保證返回對象的順序,即使您將它們推送到您的數組時也是如此。 http://stackoverflow.com/a/5525820/4515720如果您期待特定的對象排序,則在使用它之前,您必須對陣列進行排序。 –
這裏的踢球者是我直接通過循環('_0','_1','_2'等)訪問這些屬性。 JSON命令有他們無關緊要,這是一個解決方案。當我嘗試將其轉換爲一個對象數組時,它仍然不合適。 有沒有可能我誤解了以前的評論? – Orpheus