web-dev-qa-db-fra.com

Boucle à travers un 'Hashmap' en JavaScript

J'utilise this une méthode pour créer des 'hashmaps' artificiels en javascript. Tout ce que je cherche, c’est des paires clé | valeur, le temps d’exécution réel n’est pas important. La méthode ci-dessous fonctionne bien. 

Y a-t-il d'autres moyens de s'y retrouver?

for (var i in a_hashMap[i]) {
    console.log('Key is: ' + i + '. Value is: ' + a_hashMap[i]);
} 

Je rencontre un problème où cela génère un tas de clés non définies après la première clé, lorsque le tableau ne contient qu'une entrée. J'ai l'impression que c'est parce que le code est dans une boucle qui utilise i, même si cela ne devrait pas se produire lorsque je suis en mode débogage Je ne peux pas non plus changer car la boucle for semble ne pas comprendre la variable remplacée.

Quelqu'un a des idées?

35
myol
for (var i in a_hashmap[i])

n'est pas correcte. CA devrait etre

for (var i in a_hashmap)

ce qui signifie "boucle sur les propriétés de a_hashmap, attribuant chaque nom de propriété à i"

57
jhurshman
for (var i = 0, keys = Object.keys(a_hashmap), ii = keys.length; i < ii; i++) {
  console.log('key : ' + keys[i] + ' val : ' + a_hashmap[keys[i]]);
}
10
Raynos

Tu veux dire

for (var i in a_hashmap) { // Or `let` if you're a language pedant :-)
   ...
}

i n'est pas défini lorsque la boucle for est configurée.

6
spraff

Vous pouvez utiliser la fonction JQuery

$.each( hashMap, function(index,value){
 console.log("Index = " + index + " value = " + value); 
})
6
dchhetri

Essayez ceci pour imprimer la console correctement ... 

for(var i in a_hashMap) {
    if (a_hashMap.hasOwnProperty(i)) {
        console.log('Key is: ' + i + '. Value is: ' + a_hashMap[i]);
    }
}
5
Atmaram

Itérer sur une carte en vanille Javascript est simple.

var map = {...};//your map defined here
for(var index in map)
 {
       var mapKey = index;//This is the map's key.
       for(i = 0 ; i < map[mapKey].length ; i++)
        {
              var mapKeyVal = map[mapKey];//This is the value part for the map's key.


          }
  }
4
Binita Bharati

Ceci est un ancien post, mais une façon dont je peux penser est

const someMap = { a: 1, b: 2, c: 3 };
Object.keys(someMap)
.map(key => 'key is ' + key + ' value is ' + someMap[key]);

Faut-il utiliser cette façon de faire des itérations? Y at-il des problèmes avec cette approche?

0
Ketu