Следующий код печатает undefined, потому что в памяти 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.
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)));