2013-05-24 4 views
5

Questo è il mio JSONCome separare i valori dall'array json usando jquery.?

{ 
    "data": [ 
    [ 
     "1", 
     "Skylar Melovia" 
    ], 
    [ 
     "4", 
     "Mathew Johnson" 
    ] 
    ] 
} 

this is my code jquery Code

for(i=0; i<= contacts.data.length; i++) { 
    $.each(contacts.data[i], function(index, objValue){ 
     alert("id "+objValue); 
    }); 
} 

ho ottenuto i dati nel mio objValue ma voglio conservare separatamente in serie di id e name sembra che questo sguardo al mio codice è muggito

var id=[]; 
var name = []; 
for(i=0; i<= contacts.data.length; i++){ 
    $.each(contacts.data[i], function(index, objValue) { 
     id.push(objValue[index]); // This will be the value "1" from above JSON 
     name.push(objValue[index]); // This will be the value "Skylar Melovia" from above JSON 
    }); 
} 

Come posso fare questo.

+0

sua funziona come vuoi, giusto? Definisci meglio il problema. –

risposta

3
$.each(contacts.data, function(index, objValue) 
{ 
    id.push(objValue[0]); // This will be the value "1" from above JSON 
    name.push(objValue[1]); // This will be the value "Skylar Melovia" from above JSON 

}); 

Modifica, uso alternative:

$.each(contacts.data, function() 
{ 
    id.push(this[0]); // This will be the value "1" from above JSON 
    name.push(this[1]); // This will be the value "Skylar Melovia" from above JSON 
}); 

Il $ .each sarà iterare contacts.data che è:

[ 
    //index 1 
    [ 
     "1", 
     "Skylar Melovia" 
    ], 
    //index=2 
    [ 
     "4", 
     "Mathew Johnson" 
    ] 

] 

La funzione anomnymous si dà con la funzione di firma (indice, Objvalue) verrà applicato su ogni elemento con index come indice nell'array contact.data e objValue come valore. Per index = 1 si avrà:

objValue=[ 
      "1", 
      "Skylar Melovia" 
     ] 

Quindi è possibile accedere objValue [0] e objValue [1].

EDIT (in risposta a Dutchie432 commento e risposta;)): più veloce modo per farlo senza jQuery, $ .each è più bello di scrivere e leggere, ma qui si utilizza pianura vecchio JS:

for(i=0; i<contacts.data.length; i++){ 
    ids.push(contacts.data[i][0]; 
    name.push(contacts.data[i][1]; 
} 
+0

Beh, ce l'hai. 3 diverse risposte tutte che fanno lo stesso punto. Questa è probabilmente la migliore risposta dal momento che la mia usa pigramente '.length' nel ciclo for. La tua è più liscia. – Dutchie432

+0

slick ma quando non hai bisogno di jQuery dovresti comunque usarlo per loop ma suppongo che OP abbia bisogno di vedere come funziona $ .each – TecHunter

+0

Grazie per la soluzione e spiegando tutto questo. funziona bene .. – addy

1

Forse non sto capendo appieno, ma penso che si stia eseguendo il looping degli elementi di dati e quindi si esegua il looping dei valori contenuti. Penso che quello che vuoi è solo per scorrere gli elementi di dati e tirare i valori 0 e 1 rispettivamente.

Inoltre, credo che si desidera l'operatore less than (<) nel vostro ciclo in contrapposizione al less than or equal to (<=)

for(i=0; i<contacts.data.length; i++){ 
    ids.push(contacts.data[i][0]; 
    name.push(contacts.data[i][1]; 
} 
0

Rimuovere il for ciclo esterno. $.each già itera sopra l'array data. data[i] non è un array, quindi $.each non può iterare su di esso.

http://jsfiddle.net/ExplosionPIlls/4p5yh/

si potrebbe anche utilizzare il ciclo for invece di $.each, ma non entrambi.