2016-05-09 63 views
0

enter image description hereJSON.stringify給出錯誤的索引結構

我試圖用我的JSON.strigify()對象上(見截圖)。

但是,我得到了我不期待的結果,對象索引是錯誤的順序。

全部字符串化JSON,你可以在這裏看到:http://vpaste.net/LqNlq

正如你所看到的第一個指標是9:0,但不按預期8:0

這裏有什麼問題?

+3

與數組不同,對象屬性沒有以任何可預測的方式排序。每個瀏覽器都以自己的方式執行,而且不能依賴此順序。你不能放置一個物體。 – blex

+1

你應該看看使用數組,這不保證對象屬性的順序。 http://stackoverflow.com/questions/5525795/does-javascript-guarantee-object-property-order – IrkenInvader

+0

這很可能是鉻。 –

回答

1

JavaScript中的對象鍵不保證以任何順序排列。

你應該讓它成爲一個對象數組,而不是保持順序。

例如

{ 
    "1": [ 
    { "key": "8:0", ... }, 
    { "key": "8:30", ... }, 
    ... 
    ], 
    "2": ... 
} 

這也應該是相同的結構,如果你希望你的頂級鍵("1""2"等),以便進行遍歷。

+0

所有MSIE版本都保留輸入順序。快速崇拜者不會!因爲這是一種自然而然的預期行爲。這是一個經驗性要求,誰在乎標準沒有明確說明。如果實現對瀏覽器供應商的具體實現留下了一個至關重要的自我理解的需求,這並不意味着他們可以自由地對其進行洗牌,僅僅因爲他們沒有明確要求維護他們的訂單。 –

+2

你所說的一切都是意見。事實上,由於瀏覽器可以有不同的對象排序,所以更有證據表明你不應該迭代對象。不要將對象用作關聯數組。有更多的邏輯方法來構建您的數據。 – MattDiamant

+1

@BekimBacaj--說這樣做的一種特殊方式是「關鍵的自我理解的要求」並不是真的。我編寫了ECMAScript 10多年,無需購買任何產品。有訂單的東西在陣列裏舉行。而且,「讓他們自由來洗牌」實際上,從字面意義上講,當規範沒有描述訂單時,它意味着什麼。 –