2015-02-06 6 views
2

Я экспериментировал с ES6 Картой в io.js и понял, что я не могу сделать следующее:Как использовать ES6 Hash карту на любом объект без ссылки сохранения (Т.е. Java хэш-код)

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

Это потому, что {key: "value"} === {key: "value"} является ложным.

Мне нужно иметь возможность использовать объект в качестве ключа, но не требует, чтобы объект ACTUAL искал значение, например, как java HashMap использует hashcode и equals. Это возможно?

+0

Почему бы не использовать JSON.parse ({key: "value"}) в качестве ключа? –

ответ

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