正如标题所示,我使用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]是固定的,感谢答案。愚蠢的错误
答案 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>
要读回来,只需检查最后一部分是否有下划线和数字值。