我有一个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'值作为数字。
答案 0 :(得分:1)
什么是“文字”?我猜你的意思是'使用文字符号创建的对象'。
只有Array(和字符串)具有length属性,你想要的是遍历属性
for (var prop in members) {
if (members.hasOwnProperty(prop)) {
alert("members has property " + prop);
}
}
这应该让你走上正确的道路,因为它不容易理解其余的逻辑
答案 1 :(得分:0)
警报为您提供“未定义”,因为您的函数似乎需要一个数组而您的“成员”变量是一个对象。
未在对象上定义“length”属性。所以,
var a = {
name:'test',
age:56
};
console.log(a.length); //undefined
同样是没有得到回应的原因。