以下代码打印未定义,因为内存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来访问。
答案 0 :(得分:1)
我建议您从对象创建哈希。如果您的属性顺序不同,纯字符串化可能会失败。例如:
JSON.stringify({a: 1, b:2}) !== JSON.stringify({b: 2, a:1})
您可以使用hashcode或object-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)));