Estoy usando este método para hacer 'hashmaps' artificiales en javascript. Todo lo que busco son pares clave | valor, el tiempo de ejecución real no es importante. El siguiente método funciona bien.

¿Hay alguna otra forma 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 el que esto genera un montón de claves indefinidas después de la primera clave, cuando la matriz solo contiene una entrada. Tengo la sensación de que es porque el código está dentro de un bucle que usa i, aunque cuando sigo en la depuración no debería estar sucediendo. Tampoco puedo cambiar i ya que el bucle for parece no entender la var reemplazada en absoluto.

Alguien alguna idea?

38
myol 19 jul. 2011 a las 18:25

7 respuestas

La mejor respuesta
for (var i in a_hashmap[i])

No es correcto. Debería ser

for (var i in a_hashmap)

Lo que significa "recorrer las propiedades de a_hashmap, asignando cada nombre de propiedad a su vez a i"

58
jhurshman 19 jul. 2011 a las 14:30

Intente esto para imprimir la consola correctamente ...

for(var i in a_hashMap) {
    if (a_hashMap.hasOwnProperty(i)) {
        console.log('Key is: ' + i + '. Value is: ' + a_hashMap[i]);
    }
}
5
Atmaram 30 jun. 2015 a las 10:33

Iterar a través de un mapa en Javascript vainilla 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
Binita Bharati 27 sep. 2013 a las 08:34

¿Quieres decir

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

i no está definido cuando se configura el bucle for.

6
spraff 19 jul. 2011 a las 16:13

Esta es una publicación antigua, pero una forma en la que puedo pensar es

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

¿Debería usarse esta forma de iteración? ¿Hay algún problema con este enfoque?

0
Ketu 20 abr. 2018 a las 13:27

Puedes usar la función JQuery

$.each( hashMap, function(index,value){
 console.log("Index = " + index + " value = " + value); 
})
6
GothamGirl 15 sep. 2014 a las 11:55
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]]);
}
11
Raynos 19 jul. 2011 a las 14:31