jQuery: правильно ли проходит по объекту? - PullRequest
17 голосов
/ 05 января 2011

Я пытаюсь перебрать показанный ниже JS-объект со следующим фрагментом кода, при этом мне нужно получить как индексный ключ, так и внутренний объект.следующее не работает?

Объект:

({ prop_1:["1", "2"],
 prop_2:["3", "4"]})

Мой код:

$.each(myObject, function(key,valueObj){
    alert(key + "/" + valueObj.toSource() );
});

Ожидаемый результат:

prop_1 / (["1", "2"])

Ответы [ 2 ]

29 голосов
/ 05 января 2011

Внутренний объект, который вы извлекаете нормально, valueObj - это массив, у него просто нет метода .toSource() (по крайней мере, кросс-браузер в любом случае), если вы удалите его, вы получить оповещение:

$.each(myObject, function(key,valueObj){
    alert(key + "/" + valueObj );
});

Вы можете проверить это здесь , не думайте, что вывод просто:

prop_1/1,2
prop_2/3,4

... по умолчанию .toString() в массиве - это список с разделителями-запятыми, так что это то, что вы видите с alert(). Например, если вы вместо этого сделали alert(key + "/" + valueObj[0] );, вы увидите:

prop_1/1
prop_2/3

... так что вы можете видеть, что у вас есть нужный массив, вы можете проверить это здесь .

4 голосов
/ 05 января 2011

Вы можете использовать цикл for:

    var myObject = ({ prop_1:["1", "2"], prop_2:["3", "4"]})
    for (var key in myObject) {
       if (myObject.hasOwnProperty(key)) {
           alert(key + "/" + myObject[key]);
        }
     }
...