Javascript通过具有相等字段但内存中不同的键对象访问map的值

时间:2018-12-22 21:57:12

标签: javascript hashmap

以下代码打印未定义,因为内存a和b不相同。

let map = new Map();

let obj1 = {value1: 1, value2: 2};
let obj2 = {value1: 1, value2: 2};

map.set(obj1, 'someValue');
console.log(map.get(obj2));

我正在寻找一种方法来访问存储的'someValue'值,该值用对象obj1的键和在字段方面相等的另一个键obj2来访问。

2 个答案:

答案 0 :(得分:1)

我建议您从对象创建哈希。如果您的属性顺序不同,纯字符串化可能会失败。例如:

JSON.stringify({a: 1, b:2}) !== JSON.stringify({b: 2, a:1})

您可以使用hashcodeobject-hash之类的模块来创建哈希,例如:

map.set(encode().value(obj1), 'someValue')

答案 1 :(得分:1)

您可以获取对象的条目并对它们进行排序,以获得可比的JSON。

function getEntries(object) {
    return JSON.stringify(Object
        .entries(object)
        .sort(([a], [b]) => a.localeCompare(b))
    );
}

var map = new Map(),
    obj1 = { value1: 1, value2: 2 },
    obj2 = { value2: 2, value1: 1 };

map.set(getEntries(obj1), 'someValue');
console.log(map.get(getEntries(obj2)));