2011-01-05 5 views
14

Sto provando a scorrere l'oggetto JS sotto mostrato con il seguente frammento di codice, mentre ho bisogno di recuperare sia la chiave dell'indice che l'oggetto interno.jQuery: loop attraverso l'oggetto correttamente?

Come diavolo dovrei fare questo, in quanto ciò che segue non funziona?

L'oggetto:

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

Il mio codice: uscita

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

atteso:

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

risposta

22

L'oggetto interno che stai recupero bene, valueObjè la matrice, non ha alcun metodo .toSource() (al minimo t non cross-browser in ogni caso), se si rimuove che si otterrà un avviso:

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

You can test it out here, non essere gettato che l'uscita è solo:

prop_1/1,2 
prop_2/3,4 

... il l'impostazione predefinita .toString() in una matrice è un elenco delimitato da virgole, quindi questo è ciò che si vede con uno alert(). Ad esempio, se invece fatto alert(key + "/" + valueObj[0]);, vedreste:

prop_1/1 
prop_2/3 

... così si può vedere si ha l'Array che si desidera, you can test that here.

3

si potrebbe usare un per in loop:

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

Ciò include funzioni come pure, in modo da essere sicuri di filtrarli con 'typeof' se non li si vuole. (JavaScript, The Good Parts, 3.7 Enumeration) – mdup