it-swarm.com.de

TypeScript, Durchlaufen eines Wörterbuchs

In meinem Code habe ich ein paar Wörterbücher (wie empfohlen hier ), die mit einem String indexiert sind. Da es sich hier um einen improvisierten Typ handelt, habe ich mich gefragt, ob es Vorschläge gibt, wie ich die einzelnen Schlüssel (oder Werte, für die ich sowieso nur die Schlüssel benötige) durchlaufen kann. Jede Hilfe dankbar!

myDictionary: { [index: string]: any; } = {};
140
ben657

Um die Schlüssel/Werte zu durchlaufen, verwenden Sie ein for in loop:

for (let key in myDictionary) {
    let value = myDictionary[key];
    // Use `key` and `value`
}
222
Ian

@Alcesem hatte es fast richtig gemacht, außer dass der Vorteil dieser Methode darin besteht, dass man den hasOwnProperty() guard nicht mit Object.keys Aufnehmen muss, da der Iterator die Prototypkette nicht weiter durchsucht. Das Folgende ist also nicht nur für Wörterbücher, sondern für alle Arten von Objekten in TypeScript und Javascript sicher.

<ES 2017:

Object.keys(obj).forEach(key => {
  let value = obj[key];
});

> = ES 2017:

Object.entries(obj).forEach(
  ([key, value]) => console.log(key, value)
);
110
Stephen Paul

Die von Ian erwähnte Schlüssel-/Werteschleife weist eine Einschränkung auf. Wenn an die Objekte möglicherweise Attribute angehängt sind und Sie den Operator in verwenden, werden diese Attribute eingeschlossen. Sie sollten also sicherstellen, dass der Schlüssel ein Attribut Ihrer Instanz und nicht des Prototyps ist. Ältere IEs sind dafür bekannt, dass indexof(v) als Taste angezeigt wird.

for (const key in myDictionary) {
    if (myDictionary.hasOwnProperty(key)) {
        let value = myDictionary[key];
    }
}
49
Jamie Starke

Wie wäre es damit?

for (let [key, value] of Object.entries(obj)) {
    ...
}
43

Kürzester Weg, um alle Dictionary-/Objektwerte zu erhalten:

Object.keys(dict).map(k => dict[k]);
0
k06a