2011-07-19 20 views
31

Używam metody this do tworzenia sztucznych "hadhmap" w javascript. Wszystko, czego dążę, to pary klucz | wartości, rzeczywisty czas działania nie jest ważny. Poniższa metoda działa dobrze.Pętla poprzez "Hashmap" w JavaScript

Czy są na to inne sposoby?

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

ja napotkasz problem gdzie to wyprowadza pęk kluczy niezdefiniowanych po pierwszym kluczem, gdy tablica zawiera tylko jeden wpis. Mam wrażenie, że to dlatego, że kod znajduje się w pętli, która używa i, chociaż kiedy śledzę w debugowaniu, to nie powinno się dziać. Nie mogę też zmienić i, ponieważ pętla for wydaje się nie rozumieć w ogóle zmienionego var.

Czy ktoś ma jakieś pomysły?

+1

Wystarczy obejrzeć ten wątek: [JavaScript HashMap Equivalent] [1] nadzieję, że to pomaga. [1]: http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – elvenbyte

Odpowiedz

52
for (var i in a_hashmap[i]) 

nie jest poprawny. Powinno być

for (var i in a_hashmap) 

co oznacza "pętlę nad właściwościami a_hashmap, przypisując każdej nazwy właściwości z kolei i"

+1

Ahhh, głupi mnie. Pozostałości poprzedniej pętli i nie zwracając uwagi. To prawda. Dzięki. – myol

5

Czy oznacza

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

i jest nieokreślone, gdy dla pętli zostanie utworzony.

+0

'var' jest bardziej krzyżowego przeglądarki? – Nivas

+0

Nie myślałem [do sprawdzenia] (http://en.wikipedia.org/wiki/JavaScript#Versions). Przypuszczam, że masz rację. – spraff

+0

Downvote? "odłóż" na bok, to jest to samo, co zaakceptowana odpowiedź: -/ – 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

To jest dobry sposób na przechodzenie między kluczami i wartościami. – iabhi

6

można użyć funkcji jQuery

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

iteracja mapa w wanilii Javacsript jest prosta.

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

Spróbuj tego, aby prawidłowo drukować konsoli ...

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