2011-07-19 86 views
31

Tôi đang sử dụng phương thức this để tạo 'hashmaps' nhân tạo trong javascript. Tất cả những gì tôi nhắm tới là các cặp khóa giá trị, thời gian chạy thực tế không quan trọng. Phương pháp bên dưới hoạt động tốt.Lặp qua 'Hashmap' trong JavaScript

Có cách nào khác để lặp lại điều này không?

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

Tôi chạy vào một vấn đề nơi này xuất ra một loạt các phím không xác định sau khi chìa khóa đầu tiên, khi mảng chỉ chứa một entry. Tôi có cảm giác đó là bởi vì mã nằm trong vòng lặp sử dụng i, mặc dù khi tôi theo dõi trong debug nó không nên xảy ra. Tôi cũng không thể thay đổi i như vòng lặp cho dường như không hiểu var thay thế ở tất cả.

Bất kỳ ai có ý tưởng nào?

+1

Chỉ xem chủ đề này: [Javascript HashMap Equivalent] [1] Hy vọng nó sẽ giúp bạn. [1]: http://stackoverflow.com/questions/368280/javascript-hashmap-equivalent – elvenbyte

Trả lời

52
for (var i in a_hashmap[i]) 

không chính xác. Nó phải là

for (var i in a_hashmap) 

có nghĩa là "vòng lặp qua các thuộc tính của a_hashmap, gán mỗi tên tài sản lần lượt để i"

+1

Ahhh, ngớ ngẩn tôi. Những tàn dư của một vòng lặp trước và không chú ý. Đúng rồi đó. Cảm ơn. – myol

5

Bạn có nghĩa là

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

i là undefined khi cho vòng lặp được thiết lập.

+0

'var' có nhiều trình duyệt chéo hơn không? – Nivas

+0

Không nghĩ [cần kiểm tra] (http://en.wikipedia.org/wiki/JavaScript#Versions). Tôi cho rằng bạn nói đúng. – spraff

+0

Downvote? 'let' sang một bên, điều này giống như câu trả lời được chấp nhận: -/ – 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

Đây là cách gọn gàng để lặp qua các khóa và giá trị. – iabhi

6

Bạn có thể sử dụng JQuery chức năng

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

iterating qua một bản đồ trong vanilla Javacsript rất đơn giản.

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

Hãy thử điều này để in giao diện điều khiển một cách chính xác ...

for(var i in a_hashMap) { 
    if (a_hashMap.hasOwnProperty(i)) { 
     console.log('Key is: ' + i + '. Value is: ' + a_hashMap[i]); 
    } 
} 
Các vấn đề liên quan