1

更新

我有一个对象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 和 76,myObject[0]也不会找到第一条记录。

谢谢。

4

2 回答 2

8

如果您的键不连续,则不应使用数组。改用一个对象:

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)
}
于 2012-12-31T07:55:27.483 回答
-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 ++;
}

如果您想使用forEachreduce喜欢上面的内容,您需要找到一个 shim(基本上,您需要自己实现这些功能)。我会推荐这个页面上的两个shim 和这个页面上shim较大的forEach一个,或者使用一个库来填充它们reduce

于 2012-12-31T08:17:20.250 回答