2011-06-17 21 views
5

¿Solo si alguien puede explicarme por qué la caja de alertas no devuelve una matriz sino vacía?¿Cómo foreach en una matriz multidimensional con jQuery? Comportamiento extraño

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); 
}); 

En realidad, voy a tener este tipo de matriz a partir de un servicio web y necesito bucle en esta matriz para recuperar datas más.

Pero no entiendo por qué el bucle no funciona correctamente.

Gracias de antemano chicos.

Respuesta

1

No debe usar matrices como esta en Javascript. Las matrices están indexadas numéricamente. Si se escribe

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

va a añadir una propiedad a la respuesta [1] gama

EDITAR - He leído un poco mejor su comentario. Afirma:

// FYI: La salida es una matriz de pares de claves de valor (por ejemplo, respuesta [0] .ID), siendo las claves :

que pueda tener una variedad de objetos.

Esto correlaciona los datos que recibirá.

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'; 

y se puede acceder a ellos de esta manera:

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

En realidad, quiero utilizar este servicio: http://www.postcodeanywhere.co.uk/support/webservices/PostcodeAnywhere/Interactive/FindByPostcode/v1/default.aspx En la parte superior de la página, el código de función javascript muestra: // PONGA SU CÓDIGO AQUÍ // FYI: El resultado es una matriz de pares de valores clave (por ejemplo, respuesta [0] .Id), las claves son: // Id // StreetAddress // Place Así que estoy tratando de construir una matriz de ejemplo solo para comenzar a implementar mi script. Pero mi matriz parece estar equivocada. Si alguien puede darme la sintaxis correcta de mi matriz. Gracias –

+0

@Antoine modifiqué la respuesta –

8

Eso no es una matriz multidimensional, pero un código no válido. Arrays y Objects (Hashes) son cosas diferentes, no como lo hace php.

Así que en la parte superior debe escribir lo siguiente:

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

y usted podría iterar sobre ella como lo hizo:

$.each(response , function(index, obj) { 
    $.each(obj, function(key, value) { 
     console.log(key); 
     console.log(value); 
    }); 
}); 
5

si se intenta: console.log (respuesta) .. .verás que la matriz está vacía, parece que la matriz no está bien formada.

¿por qué no utiliza el formato 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); 
} 
Cuestiones relacionadas