Mam tablicę asocjacyjną w JavaScript:
var dictionary = {
"cats": [1,2,3,4,5],
"dogs": [6,7,8,9,10]
};
Jak zdobyć klucze tego słownika? tzn. chcę
var keys = ["cats", "dogs"];
Edytuj 7 lat później: aby poprawić terminologię - nie ma czegoś takiego jak „tablica asocjacyjna” w Javascripcie - jest to technicznie po prostu object
i chcemy kluczy obiektowych.
javascript
arrays
Simon_Weaver
źródło
źródło
Odpowiedzi:
Możesz użyć:
Object.keys(obj)
Przykład:
Informacje na temat obsługi przeglądarki znajdują się poniżej. Jest obsługiwany w Firefox 4.20, Chrome 5, IE9. Poniższy link zawiera fragment kodu, który można dodać, jeśli
Object.keys()
nie jest obsługiwany w przeglądarce.https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/keys
źródło
Spróbuj tego:
hasOwnProperty
jest potrzebne, ponieważ możliwe jest wstawienie kluczy do prototypowego obiektudictionary
. Ale zwykle nie chcesz, aby te klucze znajdowały się na liście.Na przykład, jeśli to zrobisz:
a następnie wykonać
for...in
pętlędictionary
, dostaniesza
ib
, ale dostaniesz równieżc
.źródło
keys.push(key);
. Po prostu wyciągasz (a więc deklarujesz) z globalnej przestrzeni nazw. :)Jest to instrukcja for..in .
źródło
dictionary.hasOwnProperty(key)
przeciwnym razie możesz skończyć z metodami z łańcucha prototypów.Krótka uwaga, bądź ostrożny przy użyciu for..in, jeśli korzystasz z biblioteki (jQuery, prototyp itp.), Ponieważ większość z nich dodaje metody do tworzonych obiektów (w tym słowników).
Oznacza to, że gdy przejdziesz nad nimi, nazwy metod pojawią się jako klucze. Jeśli korzystasz z biblioteki, przejrzyj dokumentację i poszukaj wyliczalnej sekcji, w której znajdziesz odpowiednie metody iteracji twoich obiektów.
źródło
Prosty sposób JQUERY.
Właśnie tego używam
DictionaryObj jako obiekt słownika javascript, którym chcesz przejść. wartość, kluczem oczywiście są ich nazwy w słowniku.
źródło
Obecnie używam odpowiedzi Rob de la Cruz
a we wcześniej załadowanym pliku mam kilka wierszy kodu pożyczonych z innych miejsc w Internecie, które dotyczą przypadku starych wersji interpreterów skryptów, które nie mają wbudowanych kluczy Object.keys.
Myślę, że jest to najlepsze z obu światów dla dużych projektów: prosty nowoczesny kod i kompatybilność wsteczna dla starych wersji przeglądarek itp.
Skutecznie wprowadza rozwiązanie JW do funkcji, gdy obiekt Object.keys (obj) Rob de la Cruz nie jest natywnie dostępny.
źródło