已更新
我有一个对象var myObject = {};
我使用像这样的密钥构建它:
myObject[key] = {
name: ...
};
想象一下,我创造了三条记录:
myObject[13] = {...};
myObject[281] = {...};
myObject[76] = {...};
我现在想要遍历对象,就像它是一个数组一样。
var i,
length = myObject.length; // ?? Problem here 'cos it ain't an array
for (i = 0; i < length; i += 1) {
????
};
如何在????
处参考三个元素?我不知道数字13,281&amp; 76,myObject[0]
不会找到第一条记录。
感谢。
答案 0 :(得分:5)
如果您的密钥不连续,则不应使用数组。改为使用对象:
var myObject = {};
要循环对象的键,可以使用for..in
语法:
for (var key in myObject) {
var value = myObject[key];
}
要使当前代码正常工作,您必须遍历所有密钥,并检查它们是否具有值:
for (var i = 0; i < myArray.length; i++) {
var value = myArray[i];
if (typeof value === 'undefined') continue;
console.log(key, ' -> ', value)
}
答案 1 :(得分:-1)
如果您使用的是现代JavaScript引擎:
myArray.forEach(function(val, key) {
// val = the value
// key = the index
});
就是这样。获得它的大小(在这种情况下为3)......
var size = myArray.reduce(function(prev) {
return ++prev;
}, 0);
如果您希望在旧版浏览器中使用此功能,则需要执行其他操作。最简单的解决方案可能是自己实现这样的东西:
for (var i = 0; i < myArray.length; i ++) {
var val = myArray[i];
if (typeof val !== "undefined") {
console.log(val);
}
}
要获得它的大小,这是一个类似的努力(如果你同时做两件事,你可以结合上面的方法):
var size = 0;
for (var i = 0; i < myArray.length; i ++) {
if (typeof myArray[i] !== "undefined")
size ++;
}
如果你想像上面那样使用forEach
和reduce
,你需要找到一个垫片(基本上,你需要自己实现这些功能)。我建议使用larger of the two forEach
shims on this page和the reduce
shim on this page,或使用a library that shims them all。