Javascript доступ к значениям карты через ключевые объекты, которые имеют одинаковые поля, но не совпадают в памяти

1

Следующий код печатает 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, равным с точки зрения полей.

  • 1
    вам нужна та же ссылка на объект или примитивное значение.
  • 0
    Моя ошибка, я плохо отредактирую пост, и да будет работать stringify.
Показать ещё 2 комментария
Теги:
hashmap

2 ответа

1
Лучший ответ

Я бы предложил вам создать хеш из вашего объекта. Обычная stringify может потерпеть неудачу, если ваши свойства находятся в другом порядке. Например:

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

Вы можете использовать такой модуль, как хеш- код или объект-хеш, чтобы создать хеш, например:

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

Вы можете взять записи объекта и отсортировать их для получения сопоставимого 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)));

Ещё вопросы

Сообщество Overcoder
Наверх
Меню