我正尝试在jQuery中设置一个数组,然后需要对其执行一个for循环。但是由于某种原因,我似乎不能使用关联数组?
var items = new Array();
items['foo'] = 123456;
items['bar'] = 789012;
items['baz'] = 345678;
items['bat'] = 901234;
alert(items.length);这只是一个测试,但它返回0?
发布于 2012-08-08 01:45:58
你不能让JavaScript中的associative array像你想要的那样,相反,你可以使用。
例如:
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
有关更多信息,请参阅here。
另一个是:
Object.keys(items).length;但并不是所有的浏览器都支持。
发布于 2012-08-08 01:52:49
var items = new Array();
items['foo'] = 123456;问题出在第一行。您认为您正在向索引foo处的数组添加一个项,但实际上您正在向items变量添加一个具有键foo和值123456的属性。如果你输入items.foo,它会返回你的123456。
这种方法的问题是,向数组添加属性并不能神奇地增加数组的长度。
如果您希望使用非数字索引,则需要使用对象而不是数组:
var items = {
foo: 123456,
bar: 789012,
baz: 345678,
bat: 901234
};发布于 2012-08-08 01:55:10
另一种方法可能是设置两个不同的数组,它们是并行构造的:
var items = [], items2 = [];
items.push('foo');
items2.push(123456);
// etc.
alert(items2.length);这种方法的效率取决于您将如何使用它。如果您只打算循环遍历项目列表并对每个项目执行某些操作,这种方法可能会更有效。但是,如果您需要像使用关联数组(items['foo'])一样使用它,那么您最好构建一个对象。
https://stackoverflow.com/questions/11851306
复制相似问题