Как использовать ES6 Hash Map для любого объекта без сохранения ссылки (т.е. хэш-код Java)

Я экспериментировал с ES6 Map в io.js и понял, что не могу сделать следующее:

var map = new Map()
map.set( {key:"value"}, "some string");
map.get( {key:"value"} ); // undefined. I want "some string"

Это связано с тем, что {key:"value"} === {key:"value"} имеет значение false.

Мне нужно иметь возможность использовать объект в качестве ключа, но не требовать, чтобы объект ACTUAL искал значение, например, как в java HashMap используется хэш-код и равно. Это возможно?

1 ответ

Решение
  • Если отсутствие идентификатора объекта связано с сериализацией-десериализацией туда и обратно, просто дайте им уникальный идентификатор, который сохранился, и используйте этот идентификатор в качестве ключа.
  • вычислить ключ из подмножества его свойств, если вы можете быть уверены, что остальные свойства либо зависят от этого подмножества, либо не имеют отношения к вашей работе
  • реализовать свою собственную хэш-карту и хеширование объектов. это может быть сложно с хост-объектами, но должно быть довольно просто с JSON-совместимыми данными
  • JSON-кодирование перед каждым получением или установкой. Это довольно неэффективно и работает только с сериализуемыми объектами JSON. Но проще в реализации, чем предыдущий вариант
Другие вопросы по тегам