在 Javascript / jQuery 中获取对象的长度

Getting Length of Object in Javascript / jQuery

本文关键字:取对象 获取 Javascript jQuery      更新时间:2023-09-26

我正在尝试在jQuery中设置一个数组,然后我需要对其执行一个for循环。但是由于某种原因,我似乎无法使用关联数组?

var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);

这只是一个测试,但它返回 0?

你不能在

JavaScript 中按照你想要的方式associative array,而是可以使用 Object

例如:

var items = {
  foo : 123456,
  bar : 789012,
  baz : 345678,
  bat : 901234
}

要计算长度,您可以执行以下操作:

var getObjectSize = function(obj) {
    var len = 0, key;
    for (key in obj) {
        if (obj.hasOwnProperty(key)) len++;
    }
    return len;
};

用途:getObjectSize(items); // output: 4

欲了解更多信息,请参阅此处。

另一个是:

Object.keys(items).length;

但并非所有浏览器都支持。

var items = new Array();
items['foo'] = 123456;

问题出在第一行。您认为您正在向索引foo的数组中添加一个项目,但您实际上是在向items变量添加一个属性,其中包含键foo和值123456。如果您要键入items.foo它会返回您的123456

这种方法的问题在于,向数组添加属性不会神奇地增加数组的长度。

如果要使用非数字索引,则需要使用对象而不是数组:

var items = {
    foo: 123456,
    bar: 789012,
    baz: 345678,
    bat: 901234
};

另一种方法可能是设置两个不同的数组,并行构造:

var items = [], items2 = [];
items.push('foo');
items2.push(123456);
// etc.
alert(items2.length);​

此方法的效率取决于您如何使用它。如果您只打算循环浏览项目列表并对每个项目执行某些操作,则此方法可能更有效。但是如果你需要像关联数组(items['foo'])一样使用它,那么你最好构建一个对象。

.length 属性返回数组的最高数字索引。因此,在您的情况下,没有数字索引,它返回 0。尝试

items[98] = "something";

项目长度将是 98..!请谨慎使用 .length 属性,如果您还想计算非数字标记,请遍历 Object(数组也是一个对象)并计算其 ownProperties。