Поиск ключей с массивом путем глубокого сравнения вместо строгого равенства в карте ES6

Я занимаюсь переносом некоторого кода, который использовал библиотеку hashmap, на ES6 Карта. Однако я столкнулся с проблемой, что мои существующие карты имеют ключи с массивами. Наступает время поиска, эквивалентные массивы генерируются и используются в качестве ключей поиска. При использовании HashMap это было нормально, поскольку сложные ключи хэшируются таким образом, что это эквивалентно глубокому сравнению. С другой стороны, Map в ES6 выполняет строгое сравнение ключей на равенство.

Мой старый метод поиска ключей:

var h = new HashMap();
var k = [1,2,3];
h.set(k, 'foo');
h.has([1,2,3]) // returns true

В ES6 этот метод не работает из-за строгого сравнения на равенство.

var m = new Map();
var k = [1,2,3];
m.set(k, 'foo');
m.has([1,2,3]) // returns false

Есть ли способ заставить заданную функцию сравнения или перегрузить get() таким образом, чтобы сложные ключи искались путем глубокого сравнения вместо строгого равенства? Мне не удалось создать подкласс Map, который делает это без линейного поиска по ключам, что полностью сводит на нет все преимущества эффективности, которые я получил бы от использования нативного типа.


person sehrgut    schedule 12.09.2016    source источник
comment
Нет, к сожалению, нет.   -  person Bergi    schedule 12.09.2016
comment
Спасибо за дубляж! Я искал здесь около получаса и не искал хеш в контексте, поэтому я полностью пропустил это.   -  person sehrgut    schedule 12.09.2016
comment
Да, для хэш-карты вам нужна не только пользовательская функция равенства, но и метод хеширования. И JS не имеет ни того, ни другого :-/   -  person Bergi    schedule 12.09.2016
comment
Думаю, тогда я придерживаюсь сторонней библиотеки... /me unstages changes   -  person sehrgut    schedule 12.09.2016