Javascript:用一个不规则的键循环遍历对象中的所有记录

Javascript: loop through all records within an object with an irregular key

本文关键字:遍历 循环 对象 记录 不规则 一个 Javascript      更新时间:2023-09-26

更新

我有一个对象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) {
    ????
};

我如何引用????中的三个元素?我不知道数字13281&76并且CCD_ 3将不会找到第一个记录。

谢谢。

如果键不是连续的,就不应该使用数组。改为使用对象:

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)
}

如果您使用的是现代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,你需要找到一个垫片(基本上,你需要自己实现这些函数(。我建议使用本页上两个forEach垫片和本页上reduce垫片中较大的一个,或者使用一个将它们全部垫片的库。