2011-01-05 12 views
14

Próbuję wykonać pętlę poniżej pokazanego poniżej obiektu JS za pomocą następującego fragmentu kodu, a jednocześnie potrzebuję pobrać zarówno klucz indeksu, jak i obiekt wewnętrzny.jQuery: Zapętlasz prawidłowo obiekt?

Jak u licha powinienem to zrobić, ponieważ poniższe zasady nie działają?

Obiekt:

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

Mój kod:

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

oczekiwany wynik:

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

Odpowiedz

22

Wewnętrzna przedmiot jesteś pobierania porządku, valueObjjest tablica, to po prostu nie ma metody .toSource() (w Leas t nie cross-browser tak), jeśli usuniesz że dostaniesz alert:

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

You can test it out here nie zostać wyrzucony, że wyjście jest tylko:

prop_1/1,2 
prop_2/3,4 

... The domyślnie .toString() na tablicy jest listą rozdzielaną przecinkami, więc to jest to, co widzisz z alert(). Na przykład, jeśli zamiast zrobił alert(key + "/" + valueObj[0]);, można zobaczyć:

prop_1/1 
prop_2/3 

... więc widać masz Array chcesz, you can test that here.

3

można użyć w pętli:

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

ten obejmie funkcje, jak dobrze, więc należy filtrować je z 'typeof' jeśli nie chcesz ich. (JavaScript, dobre części, 3.7 wyliczenia) – mdup

Powiązane problemy