Javascript通过具有相同字段但在内存中不相同的关键对象访问映射值

Javascript通过具有相同字段但在内存中不相同的关键对象访问映射值,javascript,hashmap,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 我建议您从对象创建哈希。如果属性的顺序不

以下代码打印未定义,因为内存中的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

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

JSON.stringify({a: 1, b:2}) !== JSON.stringify({b: 2, a:1})
您可以使用模块或创建哈希,如:

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

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

函数getEntries(对象){
返回JSON.stringify(对象
.条目(对象)
.sort(([a],[b])=>a.localeCompare(b))
);
}
var map=new map(),
obj1={value1:1,value2:2},
obj2={value2:2,value1:1};
set(getEntries(obj1),'someValue');

log(map.get(getEntries(obj2))
您需要相同的对象引用或原语值。我的错误是,我会编辑帖子,是的,stringify会起作用。您应该小心使用
stringify
,除非您知道对象的属性顺序总是相同的。那么除了stringify,还有其他替代方法吗?