在任何集合的javascript中将唯一键保存为对象

时间:2018-03-17 18:34:19

标签: javascript

我想将密钥保存为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},值:真/假

是否还有其他方法可以做到这一点?

1 个答案:

答案 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; }