1

我有一个 JavaScript 文字:

var members = {
    "mother": {
        "name" : "Mary",
        "age" : "48",
        "connection": {
            "brother" : "sun"
        }
    },
    "father": {
        "name" : "Bill",
        "age" : "50"
    },
    "brother": {
        "name" : "Alex",
        "age" : "28"
    }
}

比我有一个函数,它应该从上面的文字中读取连接。它看起来像这样:

 function findRelations(members){
    var wires = new Array();
    var count = 0;
    for (n = 0; n < members.length; n++){
         alert(members.length); // this alert is undefined
        if (members[n].connection){
            for (i = 0; i < members[n].connection[0].length; i++){
                var mw = new Array();
                var destination = 0;
                for (m = 0; m < members.length; m ++){
                    if (members[m] == members[n].connection[0]){
                        destination = m;
                        mw = [n, destination];
                        wires [count] = mw;
                        count++;
                    }
                }
            }
        }
    }
    return wires;
 }

但是,当我运行此功能时,我什么也得不到。放置在函数内部的第一个警报根本显示“未定义”。

findRelations(members);
alert("Found " + wires.length + " connections");

我想这是因为 JavaScript 文字。您能否建议如何更改函数或将文字更改为 JSON 数组以使其正常工作?!最后将'm'和'n'值作为数字。

4

2 回答 2

1

什么是“字面”?我猜你的意思是“使用文字符号创建的对象”。

只有数组(和字符串)有一个长度属性,你想要的是遍历属性

for (var prop in members) {
    if (members.hasOwnProperty(prop)) {
          alert("members has property " + prop);
    }
}

这应该让你走上正确的道路,因为它不容易遵循其余的逻辑

于 2010-04-23T16:39:02.707 回答
0

警报为您提供“未定义”,因为您的函数似乎需要一个数组,而您的“成员”变量是一个对象。

“长度”属性未在对象上定义。所以,

var a = {
    name:'test',
    age:56
};
console.log(a.length);  //undefined

同样是没有得到回应的原因。

于 2010-04-23T16:39:26.317 回答