Movatterモバイル変換


[0]ホーム

URL:


  1. Веб-технологии для разработчиков
  2. JavaScript
  3. Руководство JavaScript
  4. Коллекции

This page was translated from English by the community.Learn more and join the MDN Web Docs community.

View in EnglishAlways switch to English

Коллекции

Этот раздел содержит обзор коллекцийSet и словарейMap - встроенныхструктур данных с доступом по ключу.

Словари

Тип Map

Map - реализация простого ассоциативного массива (словаря). Он содержит данные в виде набора пар ключ/значение(ключи уникальны) и предоставляет методы для доступа и манипулирования этими данными.

Также как иобъект, словарь позволяет

  • получать значение по ключу, а также проверять наличие ключа
  • добавлять/удалять пары ключ/значение
  • перезаписывать значение по ключу (ключи уникальны).
  • итерироваться по ключам

Словари, как специализированная структура данных, имеют существенные преимущества по сравнению с объектами:

  • Ключи словаря могут быть любого типа (а не только строки).
  • Словарь хранит свой размер (не надо вычислять).
  • Натуральный порядок обхода элементов ( в порядке добавления) с помощьюfor...of.
  • Словарь не подмешивает ключи из прототипа (в отличие от объекта).

В следующем примере приведены основные операции со словарём:

js
var sayings = new Map();sayings.set("dog", "woof");sayings.set("cat", "meow").set("elephant", "toot");//вызов функции .set возвращает Map, поэтому set можно объединять в цепочкиsayings.set("dog", "гав-гав"); // заменить значение по ключуsayings.size; // 3sayings.get("fox"); // undefinedsayings.has("bird"); // falsesayings.delete("dog");for (var [key, value] of sayings) {  console.log(key + " goes " + value);}// "cat goes meow"// "elephant goes toot"

Больше примеров и полное описание на странице справочникаMap .

Тип WeakMap

WeakMap это специальный вид словаря,ключами которого могут быть только объекты, причём ссылки на них в WeakMap являютсяслабыми (не учитываются сборщиком мусора (garbage collector GC)).

Примечание:ИнтерфейсWeakMap совпадает сMap, единственное отличие -ключиWeakMap нельзя итерировать (т.e. нельзя получить список ключей). Это понятно, поскольку в таком случае возникла бы неопределённость с достоверностью этого списка в зависимости от состояния garbage collection.

Больше примеров, полное описание, а также обсуждение "ЗачемWeakMap?" на странице справочникаWeakMap.

Отметим, чтоWeakMap, в частности, может элегантно использоваться для упаковки приватных данных или деталей реализации. Следующий пример взят из статьи Ника Фитцджеральда«Hiding Implementation Details with ECMAScript 6 WeakMaps» (англ.). Приватная часть сохраняется как значение вprivates и имеет время жизни такое же как и сущность класса. Сам класс и его методы публичны; прочее недоступно извне модуля:

js
const privates = new WeakMap();export class Public() {  constructor() {    const me = {    // Приватные данные идут здесь    };    // 'me' будет освобождён вместе с 'this' !!!    privates.set(this, me);  }  method () {    const me = privates.get(this);    // Сделайте что-нибудь с приватными данными в 'me'...  }}

Коллекции

Тип Set

Set реализация коллекции - структура данных, которая содержит список уникальных элементов в порядке их добавления.

В следующем примере приведены основные операции по работе с коллекциейSet:

js
var mySet = new Set();mySet.add(1);mySet.add("some text");mySet.add("foo");mySet.has(1); // truemySet.delete("foo");mySet.size; // 2for (let item of mySet) console.log(item);// 1// "some text"

Больше примеров и полное описание на странице справочникаSet

Преобразования между Array и Set

Можно создатьArray из Set с помощьюArray.from или используяspread operator.

В свою очередь, конструкторSet может приниматьArray в качестве аргумента.

Примечание:ПосколькуSet структура работает с уникальными значениями, любые повторяющиеся элементы из Array будут проигнорированы.

js
Array.from(mySet);[...mySet2];mySet2 = new Set([1, 2, 3, 4]);

Сравнение Array иSet

Словари, как специализированная структура данных, имеют существенные отличия по сравнению с массивами:

  • Set.has работает быстрее чемArray.indexOf.
  • можно удалять элементы по значению (а не по индексу как массивах).
  • NaN обрабатывается корректно.
  • поддерживается уникальность значений.

Тип WeakSet

WeakSet это специальный вид коллекции, элементами которой могут быть только объекты. Ссылки на эти объекты в WeakSet являютсяслабыми (не учитываются сборщиком мусора (garbage collector GC)).

Примечание:ЭлементыWeakSet уникальны и могут быть добавлены только один раз, также как и вSet.

Основные отличия отSet:

  • WeakSet это коллекцияобъектов ( примитивные значения не могут быть добавлены).
  • WeakSetнельзя итерировать. А также нельзя получить список (итератор) элементов.

ИспользованиеWeakSet достаточно специфическое. Пользуясь тем, что они не могут создавать утечек памяти, в них можно, например, безопасно помещать ссылки на DOM-элементы.

Больше примеров и полное описание на странице справочникаWeakSet

Проверка на равенство вMap иSet

Сравнение на равенство ключей вMap objects или объектов вSet основано на "same-value-zero algorithm":

  • алгоритм сравнения в целом совпадает с оператором===.
  • -0 и+0 считаются равными.
  • NaN считается равным самому себе (в отличие от===).

Help improve MDN

Learn how to contribute

This page was last modified on byMDN contributors.


[8]ページ先頭

©2009-2025 Movatter.jp