Каково практическое использование объектов в качестве ключей в JS типе данных карты? - PullRequest
5 голосов
/ 19 февраля 2020

Немного боится отрицательных голосов, так как это может рассматриваться как вопрос мнения, но не ясно, как и где еще разместить это на Stack Exchange, поэтому здесь я go ... Я, конечно, думаю, что это вопрос, который добавляет здесь значение, по крайней мере.

Я недавно читал в Javascript Тип данных карты (НЕ метод метода map ()). Ссылка на MDN

Я читал и следовал различным учебникам / статьям, показывающим сходства и различия между картами, массивами и «стандартными» объектами. Одним из уникальных свойств Карт является то, что вы можете использовать любой тип данных в качестве ключа, включая Объект.

Существует множество примеров, таких как этот из Tania Rascia

// Create an object
const objAsKey = { foo: 'bar' }

const map = new Map()

// Set this object as the key of a Map
map.set(objAsKey, 'What will happen?')

Вот вывод консоли:

key: {foo: "bar"}
value: "What will happen?"

Что я спрашиваю, в чем преимущество этой возможности? Зачем мне когда-либо использовать объект в качестве ключа?

Большое спасибо заранее за любой свет, который кто-либо может осветить на этом.

Надеюсь, я не стану жертвой забвения!

1 Ответ

3 голосов
/ 19 февраля 2020

Из моих твитов по теме:

Скажем, у вас есть объект (например, элемент DOM), с которым вы хотите связать некоторые данные, но не хотите изменять объект так, чтобы добавить данные непосредственно к нему. Поэтому вы используете карту с объектом в качестве ключа и связанные с ним данные в качестве значения.

Как правило, вы хотите использовать WeakMap для этого, так что если исходный объект исчезает (GCd), данные также выпущен.

, но причина использования карты вместо слабой карты заключается в том, что карта является итеративной, а слабая карта - нет.

, поэтому, если вы готовы торговать, вам нужно сделать больше Ручная работа по управлению записями на карте (для уборщика G C), тогда вы получаете возможность перечислять все записи на карте, что может быть полезно в некоторых случаях.

...