Javascript地图使用HTMLElement作为密钥

时间:2017-05-20 00:02:02

标签: javascript dictionary

正如标题所示,我使用HTMLElement作为javascript地图容器的关键

考虑以下示例

let map =  new Map(), 
    nodeA = document.createElement("b"), 
    nodeB = document.createElement("b");
map[nodeA] = 5;
console.log(map[nodeB]); // prints 5

现在很明显nodeA.isSameNode(nodeB)会给你错误。

在玩了一下后,我发现Map会将具有相同标签名称的元素视为“相等”,如果它们实际上是同一个节点则无关紧要。

有没有办法绕过这种行为?即我希望将不同的节点视为不同的密钥。

编辑感谢MarcelD指出。我的意思是说map [nodeB]是固定的,感谢答案。愚蠢的错误

2 个答案:

答案 0 :(得分:2)

您未按预期使用Map

而不是map[nodeA] = 5,您需要编写map.set(nodeA, 5)。 否则,您只需添加一个包含字符串键"[object HTMLElement]"和值5的新属性。

let nodeA = document.createElement("b");
let nodeB = document.createElement("b");

let map = new Map();
map.set(nodeA, 5);
map.set(nodeB, 1);

console.log(map.get(nodeA)); // 5
console.log(map.get(nodeB)); // 1

答案 1 :(得分:0)

@le_m是对的。所以你应该解决这个问题。但要解决你的问题:

地图具有键值对。虽然使用地图可以放入任何你想要的东西,但它仍然是关键。如:唯一标识符。如果你想要不同的对象,你需要不同的密钥。

为了解决这个问题,我会检查密钥是否已经存在,如果它确实添加了一个数字或什么东西使其成为unque(ea“_1”)并检查是否存在!重复直到它是唯一的。< / p>

要读回来,只需检查最后一部分是否有下划线和数字值。