我正在尝试在 jQuery 中设置一个数组,然后我需要对其进行 for 循环。但似乎由于某种原因我不能使用关联数组?
var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);
这只是一个测试,但它返回 0?
我正在尝试在 jQuery 中设置一个数组,然后我需要对其进行 for 循环。但似乎由于某种原因我不能使用关联数组?
var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);
这只是一个测试,但它返回 0?
你不能associative array
像你想要的那样在 JavaScript 中制作,而是可以使用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";
items.length 将是 98 ..!谨慎使用 .length 属性,如果您还想计算非数字索引,请遍历对象(数组也是对象)并计算其 ownProperties。