在JavaScript中循环“Hashmap”

Loop through a 'Hashmap' in JavaScript

我使用这个方法在JavaScript中制作人工的"哈希图"。我的目标是键值对,实际运行时间并不重要。下面的方法很有效。

有没有其他的方法来循环这个?

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

我遇到了一个问题,当数组只包含一个条目时,这个问题会在第一个键之后输出一组未定义的键。我有一种感觉,这是因为代码在一个使用i的循环中,即使当我执行调试时,它也不应该发生。我也不能改变我,因为for循环似乎根本不理解被替换的var。

有什么想法吗?


1
for (var i in a_hashmap[i])

不正确。应该是

1
for (var i in a_hashmap)

这意味着"循环遍历EDOCX1的属性(1),将每个属性名依次分配给i"。


1
2
3
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]]);
}


可以使用jquery函数

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

你是说

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

设置for循环时,i未定义。


尝试此操作以正确打印控制台…

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


在普通javacsript中迭代映射很简单。

1
2
3
4
5
6
7
8
9
10
11
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.


          }
  }


这是一篇旧文章,但我能想到的一个方法是

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

应该使用这种迭代方式吗?这种方法有什么问题吗?