2016-12-14 68 views
0

我混淆約陣列爲什麼我的對象在for循環中從last到first?

我的數據是

enter image description here

和我的for循環

​​

和我的結果是

數據打印是

segment5 segment4 段3 分段2 SEGMENT1

謝謝

+4

對象屬性沒有一個訂單。如果您需要它,請使用數組。 – str

+1

你正在循環一個對象而不是數組。 – Yoda

+1

如果它是一個數組(不是),[使用「for ... in」與數組迭代是一個壞主意](http://stackoverflow.com/questions/500504/why-is-using-for-in -with陣列迭代-A-壞主意#500531)。 –

回答

2

對象屬性的列舉並不按字母順序排列。其實它是left to implementations to decide

大多數瀏覽器按照屬性創建IIRC的順序執行。

如果您需要訂購,請使用ArrayMapSet

最後,在ES2015中,可以通過定義自己的迭代函數來創建一個可迭代的對象,該函數可以具有任何所需的順序或枚舉。

var obj = { 
 
    foo: '1', 
 
    bar: '2', 
 
    bam: '3', 
 
    bat: '4', 
 
}; 
 

 
obj[Symbol.iterator] = iter.bind(null, obj); 
 

 
function* iter(o) { 
 
    var keys = Object.keys(o); 
 
    for (var i=0; i<keys.length; i++) { 
 
     yield o[keys[i]]; 
 
    } 
 
} 
 

 
for(var v of obj) { console.log(v); } // '1', '2', '3', '4'

+0

我會嘗試一下謝謝 – Zeing

+0

注意:代碼在我的答案只會在非常新的瀏覽器中工作。 – Ben

+0

我認爲'收益'會造成功能錯誤。它看到屈服於變量在javascript – Zeing