Как перейти в многомерный массив с помощью jQuery? Странное поведение - PullRequest
5 голосов
/ 17 июня 2011

Просто если кто-то может объяснить мне, почему окно оповещений не возвращает массив, а пустой ??

var response = new Array();
response[0] = new Array();
response[1] = new Array(); 
response[2] = new Array();  

response[0]["Id"] = 1;
response[0]["StreetAddress"] = 'xxx';
response[0]["Place"] = 'yyy';

response[1]["Id"] = 2;
response[1]["StreetAddress"] = 'xxx';
response[1]["Place"] = 'yyy';

response[2]["Id"] = 3;
response[2]["StreetAddress"] = 'xxx';
response[2]["Place"] = 'yyy';

$.each(response , function(key1, value1) {
    alert(value1);
});

На самом деле, у меня будет такой массив из веб-сервиса, и мне нужно зацикливаться на этом массиве для получения данных.

Но я не понимаю, почему цикл не работает должным образом.

Заранее спасибо, ребята.

Ответы [ 3 ]

8 голосов
/ 17 июня 2011

Это не многомерный массив, а неверный код. Arrays и Objects (хэши) - это не то, что php.

Итак, вверху вы должны написать следующее:

var response = new Array();
response[0] = new Object();
response[1] = {}; // it's the same
response[2] = new Object();

И вы можете повторить это, как вы сделали:

$.each(response , function( index, obj ) {
    $.each(obj, function( key, value ) {
        console.log(key);
        console.log(value);
    });
});
5 голосов
/ 15 декабря 2011

если вы попробуете: console.log (response) ... вы увидите, что массив пуст, кажется, что массив сформирован неправильно.

почему бы вам не использовать вместо этого формат JSON?

var response = [{
    "Id":"1",
    "StreetAddress": "xxx",
    "Place":"yyy"
},
{
    "Id":"2",
    "StreetAddress": "xxx2",
    "Place":"yyy2"
},
{
    "Id":"3",
    "StreetAddress": "xxx3",
    "Place":"yyy3"
}
]
console.log(response);
//you'll get an object: [Object { Id="1", StreetAddress="xxx", Place="yyy"}, Object { Id="2", StreetAddress="xxx2", Place="yyy2"}, Object { Id="3", StreetAddress="xxx3", Place="yyy3"}]
//iterate over
for(var x=0; x < response.length; x++){
    console.log("ID: " + response[x].Id + " StreetAddress: " + response[x].StreetAddress + " Place: " + response[x].Place);
}
1 голос
/ 17 июня 2011

Вы не должны использовать такие массивы в Javascript.Массивы индексируются численно.Если вы пишете

response[1]["Id"] = 2; 

, вы добавляете свойство в массив ответов [1]

РЕДАКТИРОВАТЬ - я немного лучше прочитал ваш комментарий.В нем говорится:

// К вашему сведению: вывод представляет собой массив пар ключ-значение (например, response [0] .Id), ключи которого:

Итак, выесть массив объектов.

Это сопоставляет данные, которые вы получите.

var response = new Array;
response[0] = new Object();
response[1] = new Object(); 
response[2] = new Object();  

response[0]["Id"] = 1;
response[0]["StreetAddress"] = 'xxx';
response[0]["Place"] = 'yyy';

response[1]["Id"] = 2;
response[1]["StreetAddress"] = 'xxx';
response[1]["Place"] = 'yyy';

response[2]["Id"] = 3;
response[2]["StreetAddress"] = 'xxx';
response[2]["Place"] = 'yyy';

, и вы можете получить к ним доступ следующим образом:

jQuery.each(response, function(key, value){
         for (key2 in value[key]){
            if (value[key].hasOwnProperty(key2)){
            alert(mine[key2])
            }
         }
     });
...