2011-07-19 6 views
31

J'utilise la méthode this pour faire des 'hashmaps' artificiels en javascript. Tout ce que je vise est des paires clé/valeur, le temps d'exécution réel n'est pas important. La méthode ci-dessous fonctionne bien.Boucle à travers une 'Hashmap' en JavaScript

Existe-t-il d'autres moyens de passer en boucle?

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

je rencontre un problème où cela produit un trousseau de clés non définies après la première clé, lorsque le tableau ne contient qu'une seule entrée. J'ai le sentiment que c'est parce que le code est dans une boucle qui utilise moi, même si quand je suis dans le débogage il ne devrait pas se produire. Je ne peux pas non plus changer i car la boucle for ne semble pas du tout comprendre le var remplacé.

Quelqu'un a des idées?

+1

Il suffit de regarder ce fil: [Javascript hashmap équivalent] [1] espérons qu'il vous aidera. [1]: http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – elvenbyte

Répondre

52
for (var i in a_hashmap[i]) 

est incorrect. Il devrait être

for (var i in a_hashmap) 

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

+1

Ahhh, idiot moi. Les restes d'une boucle précédente et ne pas faire attention. C'est juste. Merci. – myol

5

Voulez-vous dire

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

i est définie lorsque la boucle for se mettre en place.

+0

'var' est navigateur plus croix? – Nivas

+0

N'a pas pensé [à vérifier] (http://en.wikipedia.org/wiki/JavaScript#Versions). Je suppose que tu as raison. – spraff

+0

Downvote? 'Soit' à part, c'est la même chose que la réponse acceptée: -/ – spraff

10
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]]); 
} 
+0

C'est une manière intéressante de faire défiler les clés et les valeurs. – iabhi

6

Vous pouvez utiliser la fonction JQuery

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

Itère une carte en Javacsript vanille 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

Essayez ceci afin d'imprimer correctement la console ...

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