我在关联数组值上遇到未定义,并且无法找出原因!
var list = new Array();
function addNewElement(id, n) {
var obj = new Object();
obj["id"] = id;
obj["n"] = n;
list.push(obj);
}
function exists(id) {
for (var o in list) {
if (o["id"] == id) {
return true;
}
}
return false;
}
id是字符串,n是整数。
在exists o [“id”]为其中的每个对象返回Undefined,但在创建对象后直接显示值并通过obj [“id”]访问。
答案 0 :(得分:6)
这不是JS for循环的工作方式。您的o
变量成为索引,而不是值。它应该是:
if (list[o]["id"] == id) {
除非你不应该在数组上使用for..in
,所以应该是:
function exists(id) {
for (var i = 0; i < list.length; i++) {
if (list[i]["id"] == id) {
return true;
}
}
return false;
}
答案 1 :(得分:-1)
下面还有很棒的代码段:Demo Here
var list = {};
setValue("etshte", 393);
var result = containsKey("etshte");
alert(result);
function setValue(key, value) {
list[key] = value;
}
function containsKey(key) {
if (list[key] == undefined)
return false;
else
return true;
}
答案 2 :(得分:-2)
对于in循环,不仅循环添加成员,还循环存储在原型
中要解决此问题:
if (o.hasOwnProperty("id") && o["id"] == id) { /* */ }