Учебники

ES6 – Коллекции

ES6 представляет две новые структуры данных: карты и наборы.

  • Карты – эта структура данных позволяет сопоставить ключ со значением.

  • Наборы – Наборы похожи на массивы. Однако наборы не поощряют дубликаты.

Карты – эта структура данных позволяет сопоставить ключ со значением.

Наборы – Наборы похожи на массивы. Однако наборы не поощряют дубликаты.

Карты

Объект Map представляет собой простую пару ключ / значение. Ключи и значения на карте могут быть примитивами или объектами.

Ниже приводится синтаксис для того же.

new Map([iterable]) 

Параметр iterable представляет любой повторяемый объект, элементы которого состоят из пары ключ / значение. Карты упорядочены, т.е. они пересекают элементы в порядке их вставки.

Свойства карты

Sr.No Описание недвижимости
1 Map.prototype.size

Это свойство возвращает количество пар ключ / значение в объекте Map.

Это свойство возвращает количество пар ключ / значение в объекте Map.

Понимание основных операций с картой

Функция set () устанавливает значение ключа в объекте Map. Функция set () принимает два параметра, а именно ключ и его значение. Эта функция возвращает объект Map.

Функция has () возвращает логическое значение, указывающее, найден ли указанный ключ в объекте Map. Эта функция принимает ключ в качестве параметра.

var map = new Map(); 
map.set('name','Tutorial Point'); 
map.get('name'); // Tutorial point

Приведенный выше пример создает объект карты. Карта имеет только один элемент. Ключ элемента обозначается именем . Ключ сопоставлен со значением Tutorial point .

Примечание. Карты различают одинаковые значения, но содержат разные типы данных. Другими словами, целочисленный ключ 1 считается отличным от строкового ключа «1» . Рассмотрим следующий пример, чтобы лучше понять эту концепцию

var map = new Map(); 
map.set(1,true); 
console.log(map.has("1")); //false 

map.set("1",true); 
console.log(map.has("1")); //true

Выход

false 
true 

Метод set () также является цепным. Рассмотрим следующий пример.

var roles = new Map(); 
roles.set('r1', 'User') 
.set('r2', 'Guest') 
.set('r3', 'Admin'); 
console.log(roles.has('r1'))

Выход

True 

Приведенный выше пример определяет объект карты. Пример объединяет функцию set () для определения пары ключ / значение.

Функция get () используется для получения значения, соответствующего указанному ключу.

В конструктор Map также может быть передан массив. Кроме того, карта также поддерживает использование оператора распространения для представления массива.

пример

var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);  
console.log(roles.get('r2'))

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

Guest

Примечание. Функция get () возвращает неопределенное значение, если указанный ключ не существует на карте.

Функция set () заменяет значение ключа, если оно уже существует на карте. Рассмотрим следующий пример.

var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);  
console.log(`value of key r1 before set(): ${roles.get('r1')}`) 
roles.set('r1','superUser') 
console.log(`value of key r1 after set(): ${roles.get('r1')}`)

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

value of key r1 before set(): User 
value of key r1 after set(): superUser

Методы карты

Sr.No Метод и описание
1 Map.prototype.clear ()

Удаляет все пары ключ / значение из объекта Map.

2 Map.prototype.delete (ключ)

Удаляет любое значение, связанное с ключом, и возвращает значение, которое Map.prototype.has (key) вернул бы ранее.

Map.prototype.has (key) вернет false позже.

3 Map.prototype.entries ()

Возвращает новый объект Iterator, который содержит массив [key, value] для каждого элемента в объекте Map в порядке вставки.

4 Map.prototype.forEach (callbackFn [, thisArg])

Вызывает callbackFn один раз для каждой пары ключ-значение, присутствующей в объекте Map, в порядке вставки. Если для thisEach указан параметр thisArg, он будет использоваться в качестве значения this для каждого обратного вызова.

5 Map.prototype.keys ()

Возвращает новый объект Iterator, содержащий ключи для каждого элемента в объекте Map в порядке вставки.

6 Map.prototype.values ()

Возвращает новый объект Iterator, который содержит массив [key, value] для каждого элемента в объекте Map в порядке вставки.

Удаляет все пары ключ / значение из объекта Map.

Удаляет любое значение, связанное с ключом, и возвращает значение, которое Map.prototype.has (key) вернул бы ранее.

Map.prototype.has (key) вернет false позже.

Возвращает новый объект Iterator, который содержит массив [key, value] для каждого элемента в объекте Map в порядке вставки.

Вызывает callbackFn один раз для каждой пары ключ-значение, присутствующей в объекте Map, в порядке вставки. Если для thisEach указан параметр thisArg, он будет использоваться в качестве значения this для каждого обратного вызова.

Возвращает новый объект Iterator, содержащий ключи для каждого элемента в объекте Map в порядке вставки.

Возвращает новый объект Iterator, который содержит массив [key, value] для каждого элемента в объекте Map в порядке вставки.

Для … петли

Следующий пример иллюстрирует обход карты с использованием цикла for… of.

'use strict' 
var roles = new Map([ 
   ['r1', 'User'], 
   ['r2', 'Guest'], 
   ['r3', 'Admin'], 
]);
for(let r of roles.entries()) 
console.log(`${r[0]}: ${r[1]}`);

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

r1: User 
r2: Guest 
r3: Admin

Слабые Карты

Слабая карта идентична карте со следующими исключениями:

  • Его ключи должны быть объектами.

  • Ключи на слабой карте можно собирать мусором. Сборка мусора – это процесс очистки памяти, занимаемой объектами, на которые нет ссылок в программе.

  • Слабая карта не может быть повторена или очищена.

Его ключи должны быть объектами.

Ключи на слабой карте можно собирать мусором. Сборка мусора – это процесс очистки памяти, занимаемой объектами, на которые нет ссылок в программе.

Слабая карта не может быть повторена или очищена.

Пример: слабая карта

'use strict' 
let weakMap = new WeakMap(); 
let obj = {}; 
console.log(weakMap.set(obj,"hello"));  
console.log(weakMap.has(obj));// true

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

WeakMap {} 
true

наборы

Набор – это структура данных ES6. Это похоже на массив за исключением того, что он не может содержать дубликаты. Другими словами, он позволяет хранить уникальные значения. Наборы поддерживают как примитивные значения, так и ссылки на объекты.

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

Установить свойства

Sr.No Описание недвижимости
1 Set.prototype.size

Возвращает количество значений в объекте Set.

Возвращает количество значений в объекте Set.

Установить методы

Sr.No Метод и описание
1 Set.prototype.add (значение)

Добавляет новый элемент с заданным значением в объект Set. Возвращает объект Set.

2 Set.prototype.clear ()

Удаляет все элементы из объекта Set.

3 Set.prototype.delete (значение)

Удаляет элемент, связанный со значением.

4 Set.prototype.entries ()

Возвращает новый объект Iterator, который содержит массив [value, value] для каждого элемента в объекте Set в порядке вставки. Это сохраняется аналогично объекту Map, так что каждая запись имеет одинаковое значение для своего ключа и значения здесь.

5 Set.prototype.forEach (callbackFn [, thisArg])

Вызывает callbackFn один раз для каждого значения, присутствующего в объекте Set, в порядке вставки. Если для forEach указан параметр athisArg , он будет использоваться в качестве значения this для каждого обратного вызова.

6 Set.prototype.has (значение)

Возвращает логическое значение, подтверждающее, присутствует ли элемент с заданным значением в объекте Set или нет.

7 Set.prototype.values ()

Возвращает новый объект Iterator, который содержит значения для каждого элемента в объекте Set в порядке вставки.

Добавляет новый элемент с заданным значением в объект Set. Возвращает объект Set.

Удаляет все элементы из объекта Set.

Удаляет элемент, связанный со значением.

Возвращает новый объект Iterator, который содержит массив [value, value] для каждого элемента в объекте Set в порядке вставки. Это сохраняется аналогично объекту Map, так что каждая запись имеет одинаковое значение для своего ключа и значения здесь.

Вызывает callbackFn один раз для каждого значения, присутствующего в объекте Set, в порядке вставки. Если для forEach указан параметр athisArg , он будет использоваться в качестве значения this для каждого обратного вызова.

Возвращает логическое значение, подтверждающее, присутствует ли элемент с заданным значением в объекте Set или нет.

Возвращает новый объект Iterator, который содержит значения для каждого элемента в объекте Set в порядке вставки.

Слабый набор

Слабые наборы могут содержать только объекты, а содержащиеся в них объекты могут собираться мусором. Как и слабые карты, слабые множества не могут быть повторены.

Пример: использование слабого набора

'use strict' 
   let weakSet = new WeakSet();  
   let obj = {msg:"hello"}; 
   weakSet.add(obj); 
   console.log(weakSet.has(obj)); 
   weakSet.delete(obj); 
   console.log(weakSet.has(obj));

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

true 
false

Итератор

Итератор – это объект, который позволяет получить доступ к коллекции объектов по одному. И set, и map имеют методы, которые возвращают итератор.

Итераторы – это объекты с методом next () . Когда вызывается метод next (), он возвращает объект со свойствами «value» и «done» . «done» – логическое значение, оно вернет true после прочтения всех элементов в коллекции

Пример 1: Set и итератор

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.entries(); 
console.log(iterator.next())

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

{ value: [ 'a', 'a' ], done: false } 

Поскольку набор не хранит ключ / значение, массив значений содержит аналогичные ключ и значение. done будет ложным, так как есть больше элементов для чтения.

Пример 2: Set и итератор

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.values(); 
console.log(iterator.next());

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

{ value: 'a', done: false }  

Пример 3: Set и итератор

var  set = new Set(['a','b','c','d','e']);  
var iterator = set.keys(); 
console.log(iterator.next()); 

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

{ value: 'a', done: false }  

Пример 4: Карта и Итератор

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.entries(); 
console.log(iterator.next()); 

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

{ value: [ 1, 'one' ], done: false }  

Пример 5: Карта и Итератор

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.values(); 
console.log(iterator.next());  

Следующий вывод отображается при успешном выполнении вышеуказанного кода.

{value: "one", done: false} 

Пример 6: Карта и Итератор

var map = new Map([[1,'one'],[2,'two'],[3,'three']]); 
var iterator = map.keys(); 
console.log(iterator.next());  

Следующий вывод отображается при успешном выполнении вышеуказанного кода.