Использование элемента в качестве ключа к хэшу в JavaScript

Я хочу создать хэш с элементами DOM в качестве ключей. Это иллюстрируется следующим кодом:

var hash = {};
var set = function(element, value) {  hash[element] = value; };
var get = function(element)        {  return hash[element];  };

set(document.getElementById('foo'), 'bar');
get(document.getElementById('foo')); // returns 'bar'

Как я могу гарантировать, что хэш-карты отображает уникальное значение для каждого Element?
Обратите внимание, что я не могу использовать необработанную строку идентификатора в качестве ключа, потому что любой произвольный Element могут быть переданы, в том числе без идентификатора.

1 ответ

Решение

В JavaScript до ES 6 в качестве ключа могут использоваться только строки. Если вы хотите использовать элементы DOM, используйте два связанных списка или WeakMap объект. Преимущество последнего метода заключается в том, что он не вызывает утечек памяти.

Применительно к вашему примеру:

var hash = new WeakMap();
hash.set(document.getElementById('foo'), 'bar');
hash.get(document.getElementById('foo')); // returns 'bar'

На момент написания WeakMap поддерживается только следующими браузерами:

Во всех других браузерах поддержка WeakMap может быть достигнута путем загрузки полифайла WeakMap.js.

Другие вопросы по тегам