我正在使用JS數組將ID映射到實際元素,即鍵值存儲。我想遍歷所有元素。我試了幾種方法,但都有其注意事項:迭代JS數組的已定義元素
for (var item in map) {...}
是否遍歷數組的所有屬性,因此它也包括功能和擴展應用到Array.prototype。例如,未來有人在Prototype庫中放棄了現有代碼。
var length = map.lenth;
for (var i = 0; i < length; i++) {
var item = map[i];
...
}
確實具有可怕的缺點的工作,但就像
$.each(map, function(index, item) {...});
他們遍歷整個範圍指標0..MAX(ID)的:
var x = [];
x[1]=1;
x[10]=10;
$.each(x, function(i,v) {console.log(i+": "+v);});
0: undefined
1: 1
2: undefined
3: undefined
4: undefined
5: undefined
6: undefined
7: undefined
8: undefined
9: undefined
10: 10
當然還有我的ID也不會像連續的序列。此外,它們之間可能存在巨大差距,因此在後一種情況下跳過未定義的性能原因是不可接受的。怎樣才能安全地遍歷數組的已定義元素(以適用於所有瀏覽器和IE的方式)?
是正確的數字順序代碼中的一個問題? – user113716 2011-01-12 17:31:03
不,這是一張無序的地圖,我不在乎訂購。我唯一擔心的是迭代已定義的元素和僅定義的元素。 – sibidiba 2011-01-12 17:43:02
相關討論http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – goat 2011-01-12 18:01:21