Функция JavaScript, которая читает связи между объектами - PullRequest
1 голос
/ 23 апреля 2010

У меня есть 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;
 }

Однако, когда я запускаю эту функцию, я ничего не получаю. И первое предупреждение, которое помещается внутри функции, показывает «undefined» вообще.

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

Полагаю, это из-за литерала JavaScript. Не могли бы вы предложить, как изменить функцию или, возможно, изменить литеральный массив на JSON, чтобы заставить его работать?

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

Что такое «буквальный»? Я предполагаю, что вы имеете в виду «объект, созданный с использованием буквенной нотации».

Только у массива (и строк) есть свойство длины, вам нужно перебрать свойства

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

Это должно привести вас на правильный путь, так как нелегко следовать остальной логике

0 голосов
/ 23 апреля 2010

Предупреждение дает вам «неопределенное», потому что ваша функция, похоже, ожидает массив, а ваша переменная «members» является объектом.

свойство "length" не определено для объекта. Таким образом,

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

То же самое является причиной получения ответа также.

...