0

我在关联数组值上遇到未定义,但不知道为什么!

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 是整数。

在存在 o["id"] 中,对于其中的每个对象,都返回未定义,但在对象创建之后,值直接存在并可通过 obj["id"] 访问。

4

3 回答 3

6

这不是 JS for 循环的工作方式。您的o变量成为索引,而不是值。它应该是:

if (list[o]["id"] == id) {

除非你真的不应该for..in在数组上使用 a ,所以它应该是:

function exists(id) {
    for (var i = 0; i < list.length; i++) {
        if (list[i]["id"] == id) {
            return true;
        }
    }
    return false;
}
于 2013-05-27T13:11:42.443 回答
-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;
    }

在这里演示

于 2013-05-27T13:25:54.173 回答
-2

for in 循环不仅循环通过添加的成员,还循环存储在原型中的成员

要解决此使用:

if (o.hasOwnProperty("id") && o["id"] == id) { /* */ }
于 2013-05-27T13:08:39.857 回答