【发布时间】:2019-12-31 22:11:57
【问题描述】:
我正在寻找一种在 javascript 中实现 HashMap 功能的方法。我发现 map() 作为 es6 中引入的全局对象,我们可以使用它来做同样的事情。但是将 aa 值作为数组似乎不起作用。任何人都可以帮助我。
@987654321 @
下面是示例代码的sn-p。
var map1 = new Map();
var names=['abc','bcd','abc'];
for(var i=0;i<name.length;i++){
if(map1.has(name[i]))
map1.set(name[i],map1.get(name[i]).push('B'));//if key is already there append B
else
map1.set(name[i],['A']);//if key is not present append A
}
console.log(map1);
我期望密钥 abc 的值为['A','B']
实际结果:
Map { 'abc' => 2, 'bcd' => [ 'A' ] }
预期结果:
Map { 'abc' => ['A','B'],'bcd' => ['A']}
【问题讨论】:
-
还要注意
.push()返回数组的新长度,而不是数组本身。 -
这是因为您正在分配
map1.get(name[i]).push('B')的 result 并且该结果是数组的新长度。你不需要分配任何东西——JS中的数组实际上就像Java中的ArrayLists,可以正常增长。此外,由于您要存储数组 reference,因此对数组的任何修改都将与它所在的地图“共享”。因为您只修改同一个对象。只做map1.get(name[i]).push('B'))而不要同时做map.set。
标签: javascript node.js dictionary ecmascript-6