我正在使用 JS 数组将 ID 映射到实际元素,即键值存储。我想遍历所有元素。我尝试了几种方法,但都有其注意事项:
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 也不会像一个连续的序列。此外,它们之间可能存在巨大差距,因此出于性能原因,在后一种情况下跳过 undefined 是 Not Acceptable 。如何才能安全地仅遍历数组的已定义元素(以一种适用于所有浏览器和 IE 的方式)?
最佳答案
使用hasOwnProperty
在 for ... in
中以确保不包括原型(prototype)添加:
for (var item in map)
if (map.hasOwnProperty(item)) {
// do something
}
关于javascript - 遍历 JS 数组的定义元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4671820/