Javascript映射使用HtmleElement作为键
正如标题所示,我使用HtmleElement作为javascript映射容器的键 考虑下面的例子Javascript映射使用HtmleElement作为键,javascript,dictionary,Javascript,Dictionary,正如标题所示,我使用HtmleElement作为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)会给你错误的答案 在玩了一会
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会将具有相同标记名的元素视为“相等”,而不管它们是否实际上是相同的节点
有没有办法避免这种行为?i、 我希望不同的节点被视为不同的键
编辑感谢MarcelD指出。我的意思是说map[nodeB]是固定的,多亏了这些答案。愚蠢的错误你没有按预期使用
您需要编写map.set(nodeA,5)
,而不是map[nodeA]=5。
否则,只需添加一个带有字符串键“[object HTMLElement]”和值5的新属性即可
让nodeA=document.createElement(“b”);
设nodeB=document.createElement(“b”);
设map=newmap();
地图集(nodeA,5);
map.set(nodeB,1);
console.log(map.get(nodeA));//5.
console.log(map.get(nodeB));//1
@leum是对的。所以你应该解决这个问题。但为了回答你的问题:
映射有键、值对。虽然有了地图,你可以放任何你想要的东西,但它仍然是一把钥匙。例如:一个唯一的标识符。如果需要不同的对象,则需要不同的关键点
为了让你解决这个问题,我会先检查这个密钥是否已经存在,如果它确实添加了一个数字或其他东西使其不合格(e.a.“_1”),然后检查它是否存在!重复直到它是唯一的
要重新阅读,只需检查最后一部分是否有下划线和数字值。您确定您的示例描述了您的问题吗?因为在本例中,console.log(nodeB)不会打印5;)