2011-07-19 45 views
31

Estoy usando el método this para hacer 'hashmaps' artificiales en javascript. Todo lo que pretendo es pares clave | valor, el tiempo de ejecución real no es importante. El siguiente método funciona bien.Loop a través de un 'Hashmap' en JavaScript

¿Hay alguna otra manera de recorrer esto?

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

me encuentro con un problema en esta salida a un manojo de llaves definidas después de la primera clave, cuando la matriz sólo contiene una entrada. Tengo la sensación de que es porque el código está dentro de un ciclo que usa i, aunque cuando sigo en depuración no debería estar sucediendo. Tampoco puedo cambiar i ya que el bucle for parece no entender la varilla reemplazada en absoluto.

¿Alguien alguna idea?

+1

simplemente ver este tema: [Equivalente Javascript Hashmap] [1] espero que le ayuda. [1]: http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – elvenbyte

Respuesta

52
for (var i in a_hashmap[i]) 

es incorrecto. Debe ser

for (var i in a_hashmap) 

que significa "bucle sobre las propiedades de a_hashmap, asignando a cada nombre de la propiedad a su vez a i"

+1

Ahhh, tonto yo. Los remanentes de un ciclo previo y no prestar atención. Esto es correcto. Gracias. – myol

5

Qué quiere decir

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

i no está definido cuando el bucle para se estableció.

+0

'var' es el navegador más cruz? – Nivas

+0

No pensé [verificar] (http://en.wikipedia.org/wiki/JavaScript#Versions). Supongo que tienes razón. – spraff

+0

¿Votación negativa? 'let' aside, esto es lo mismo que la respuesta aceptada: -/ – 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

Esta es una forma sencilla de recorrer las claves y los valores. – iabhi

6

puede utilizar la función jQuery

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

iteración a través de un mapa en vainilla Javacsript es 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

Prueba esto con el fin de imprimir correctamente la consola ...

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