web-dev-qa-db-fra.com

TypeScript, lecture en boucle dans un dictionnaire

Dans mon code, j'ai deux dictionnaires (comme suggéré ici ) qui est indexé par chaîne. En raison de son caractère quelque peu improvisé, je me demandais si je pouvais faire une boucle pour parcourir chaque clé (ou valeur, tout ce dont j'avais besoin pour les clés). Toute aide appréciée!

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

Pour boucler sur la clé/les valeurs, utilisez une boucle for in:

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

@Alcesem avait presque raison, sauf que l'avantage de cette méthode est qu'il n'est pas nécessaire d'inclure la hasOwnProperty() garde avec Object.keys, car l'itérateur ne cherchera pas plus loin dans la chaîne de prototypes. Ainsi, ce qui suit n’est pas seulement sûr pour les dictionnaires, mais pour tout type d’objet en TypeScript et Javascript.

<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

Ian a mentionné une mise en garde à propos de la boucle clé/valeur. S'il est possible que des attributs soient associés aux objets d'un objet et que vous utilisiez l'opérateur in, ces attributs seront inclus. Vous voudrez donc vous assurer que la clé est un attribut de votre instance et non du prototype. Les anciens IE sont connus pour avoir indexof(v) affiché comme une clé.

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

Que dis-tu de ça?

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

Le moyen le plus rapide d'obtenir toutes les valeurs dictionnaire/objet:

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