web-dev-qa-db-fra.com

Javascript: Itérer sur les valeurs d'objet

Je veux parcourir toutes les valeurs d'une carte ..__ Je sais qu'il est possible de parcourir toutes les clés . Mais est-il possible de parcourir directement les valeurs?

 var map = { key1 : 'value1', key2 : 'value2' }
 for (var key in map) { ...} // iterates over keys
38
Matthias M

Ce n'est pas une carte. C'est simplement une Object.

Edit: le code ci-dessous est pire que l'OP, comme Amit l'a souligné dans des commentaires.

Vous pouvez "parcourir les valeurs" en effectuant une itération sur les touches avec:

var value;
Object.keys(map).forEach(function(key) {
    value = map[key];
    console.log(value);
});
44
André Chalella

Dans le sens où je pense que vous aviez l'intention, dans ES5 ou ES2015, non, pas sans quelques travaux de votre part. 

Dans ES2016, probablement avec object.values.

Remarquez que les tableaux en JavaScript sont en réalité une carte d'un nombre entier à une valeur, et les valeurs des tableaux en JavaScript peuvent être énumérées directement.

['foo', 'bar'].forEach(v => console.log(v)); // foo bar

En outre, dans ES2015, vous pouvez rendre un objet itérable en plaçant une fonction sur une propriété portant le nom Symbol.iterator:

var obj = { 
    foo: '1', 
    bar: '2',
    bam: '3',
    bat: '4',
};

obj[Symbol.iterator] = iter.bind(null, obj);

function* iter(o) {
    var keys = Object.keys(o);
    for (var i=0; i<keys.length; i++) {
        yield o[keys[i]];
    }
}

for(var v of obj) { console.log(v); } // '1', '2', '3', '4'

En outre, d’autres réponses contiennent d’autres fonctions intégrées fournissant les fonctionnalités souhaitées, telles que Map (mais pas WeakMap car elle n’est pas itérable) et Set (par exemple, mais elles ne sont pas présentes dans tous les navigateurs) .

7
Ben

J'avais l'habitude d'itérer comme ça. Je ne sais pas si c'est un code optimisé ou non, mais cela fonctionne pour moi.

for (let [k, v] of myMap) {
    console.log("Key: " + k);
    console.log("Value: " + v);
}

J'espère que cela t'aides :)

4
Parag Jadhav

Non, il n'y a pas de méthode directe pour le faire avec des objets.

Le type Map a une méthode values() qui renvoie un itérateur pour les valeurs

1
Amit

Vous pouvez utiliser underscore.js et chaque fonction :

_.each({key1: "value1", key2: "value2"}, function(value) {
  console.log(value);
});
0
dpr

Si vous voulez profondément itérer dans un objet complexe (imbriqué) pour chaque clé & valeur, vous pouvez le faire en utilisant Object.keys () :

const iterate = (obj) => {
    Object.keys(obj).forEach(key => {

    console.log(`key: ${key}, value: ${obj[key]}`)

    if (typeof obj[key] === 'object') {
            iterate(obj[key])
        }
    })
}
0