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