我想将密钥保存为javascript中的对象,因此我尝试将Map集合用作
let tempEntry = {y:y,x:x}
let exist = map1.has(tempEntry);
if(exist){
map1.set(tempEntry,true)
}else{
map1.set(tempEntry,false)
}
但它找不到密钥并且始终返回存在为false .. 我有一个列表,我也把x和y放在tempEntry变量中。
我想要做的是将对象列表作为 项:{Y:Y,X:X},值:真/假
是否还有其他方法可以做到这一点?
答案 0 :(得分:1)
Map#has
检查相同的对象引用。
如果您有另一个具有相同键/值的对象,则不会获得原始对象。
var x = 4,
y = 4,
tempEntry = { y, x },
map1 = new Map;
map1.set(tempEntry, map1.has(tempEntry));
console.log([...map1]);
map1.set(tempEntry, map1.has(tempEntry)); // sets true
console.log([...map1]);
tempEntry = { y, x };
map1.set(tempEntry, map1.has(tempEntry)); // new object
console.log([...map1]);

.as-console-wrapper { max-height: 100% !important; top: 0; }

如果键的顺序相同,可能的解决方案可能是对象的序列化字符串。
var x = 4,
y = 4,
tempEntry = JSON.stringify({ y, x }),
map1 = new Map;
map1.set(tempEntry, map1.has(tempEntry));
console.log([...map1]);
tempEntry = JSON.stringify({ y, x });
map1.set(tempEntry, map1.has(tempEntry)); // same object
console.log([...map1]);

.as-console-wrapper { max-height: 100% !important; top: 0; }