循环关联数组

时间:2013-09-10 17:57:40

标签: javascript html

我将一堆输入字段添加到关联数组中。我可以很好地访问各个元素,例如。这有效:

arr = new Array();
field = document.getElementById("someField");
arr[field] = someValue;
alert(arr[field].id);

但是当我尝试遍历它们时,id显示为undefined,并且只有一个元素被循环播放。

for (var elem in arr) {
    alert(elem.id + " " + arr[elem]);
}

我错了吗?

编辑: arr.length出于某种原因显示为0,即使我能够访问其元素。

2 个答案:

答案 0 :(得分:1)

JavaScript中的任何关联数组都是一个对象。数组是具有特殊方法的对象,因为它们是数字索引的。所以你的代码应该是这样的:

obj = {};
field = document.getElementById("someField");
obj[field] = someValue;

for (var p in obj) {
    alert(obj[p].id);
}

答案 1 :(得分:1)

javascript-array中的键必须是数字或字符串。 field 自动转换为toString()的字符串。

arr = new Array();
field = document.getElementById("someField");
var key = field.toString();
arr[key] = someValue;
alert(arr[key].id);
在你的for循环中,你迭代该数组的键。 在这种情况下field.toString()。 并且字符串没有id - 属性。

这将有效:

for (var elem in arr) {
    alert(arr[elem].id + " " + arr[elem]);
}

通过DOM-Element的toString()方式通常是类似“[SpanElement]”的通用字符串。 如果你试图添加多个span-elements,你可以用“[SpanElement]”作为键来覆盖项目,最后只有一个元素。

关于@ user2736012评论,我鼓励大家阅读 “JavaScript Associative Arrays Demystified