W moim kodzie mam kilka słowników (jak sugerowano tutaj ), które są indeksowane przez String. Z uwagi na to, że jest to trochę improwizowany typ, zastanawiałem się, czy są jakieś sugestie dotyczące tego, w jaki sposób mógłbym zapętlać każdy klucz (lub wartość, i tak potrzebuję kluczy). Każda pomoc doceniona!
myDictionary: { [index: string]: any; } = {};
javascript
html
typescript
ben657
źródło
źródło
for (var key in myDictionary) { }
:? Wewnątrz pętli użyłbyśkey
klucza,myDictionary[key]
aby uzyskać wartośćOdpowiedzi:
Aby zapętlić klucz / wartości, użyj
for in
pętli:źródło
Object.keys(target).forEach(key => { let value = target(key); /* Use key, value here */ });
. Jeśli musisz pokazać tę metodę, przynajmniej wspomnij o ryzyku i lepszych alternatywach dla tych, którzy jeszcze nie wiedzą lepiej.<ES 2017 :
> = ES 2017 :
źródło
Object.entries
pracować w TypeScriptCo powiesz na to?
źródło
key
w ogóle, po prostu zostawić puste:[ , value]
. (Dzięki komentarzowi do tego wydania .)Ian wspomniał o jednym zastrzeżeniu dla pętli klucz / wartość. Jeśli możliwe jest, że Obiekty mogą mieć atrybuty dołączone do ich Prototypu, a gdy użyjesz
in
operatora, atrybuty te zostaną uwzględnione. Dlatego upewnij się, że klucz jest atrybutem Twojego wystąpienia, a nie prototypu. Starsze IE są znane z tego, żeindexof(v)
pojawiają się jako klucz.źródło
key
ivalue
może byćconst
.hasOwnProperty
czeku z obiektu docelowego, zamiast tego wykonaj następujące czynności: W przeciwnym...if (Object.prototype.hasOwnProperty.call(myDictionary, key))...
razie, jeśli używasz eslinta zno-prototype-builtins
regułą, wyświetli błąd.Najkrótszy sposób na uzyskanie wszystkich wartości słownika / obiektu:
źródło
Aby zdobyć klucze:
źródło
Ians Answer jest dobry, ale powinieneś użyć const zamiast let dla klucza, ponieważ nigdy nie jest aktualizowany.
źródło