ES6 - Карты и наборы

ES6 представляет две новые структуры данных - maps и sets. Давайте узнаем о них подробнее.

Карты

Карта - это упорядоченный набор key-value pairs. Карты похожи на объекты. Однако между картами и объектами есть некоторые различия. Они перечислены ниже -

Старший Нет Объект карта
1 Ключи не могут быть объектами Ключи могут быть любого типа
2 Ключи не заказываются Ключи заказываются
3 не повторяется повторяемый

Синтаксис

Синтаксис для карты приведен ниже -

let map = new Map([iterable])
let map = new Map()

пример

В следующем примере создается карта с использованием итеративного конструктора -

<script>
   let andy = {ename:"Andrel"},
      varun = {ename:"Varun"},
      prijin = {ename:"Prijin"}
   let empJobs = new Map([
   [andy,'Software Architect'],
   [varun,'Developer']]
   );
   console.log(empJobs)
</script>

Вывод приведенного выше кода показан ниже -

{{…} => "Software Architect", {…} => "Developer"}

Проверка размера карты

Свойство size можно использовать для определения количества значений, хранящихся на карте.

Синтаксис

Синтаксис для проверки размера карты приведен ниже -

map_name.size

пример

<script>
   let daysMap = new Map();
   daysMap.set('1', 'Monday');
   daysMap.set('2', 'Tuesday');
   daysMap.set('3', 'Wednesday');
   console.log(daysMap.size);
</script>

Вывод приведенного выше кода показан ниже -

3

Ниже приведены некоторые общие методы, которые можно использовать для управления картами.

Старший Нет Объект и карта
1 набор (ключ, значение)

Добавляет ключ и значение на карту

2 получить (ключ)

Возвращает значение, если ключ совпадает

3 имеет (ключ)

Возвращает истину, если элемент с указанным ключом существует; иначе возвращает false

4 ключи ()

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

5 значения()

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

6 записи ()

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

7 удалить (ключ)

Удаляет указанный элемент из объекта Map

WeakMap

WeakMap - это небольшой subset of map. Ключи имеют слабые ссылки, поэтому могут быть только непримитивными. Если нет ссылки на ключи объекта, он будет подлежать сборке мусора.

  • не повторяется
  • каждый ключ является типом объекта

WeakMap разрешит сборку мусора, если ключ не имеет ссылки.

Синтаксис

Синтаксис WeakMap указан ниже -

new WeakMap([iterable])

Пример 1

<script>
   let emp = new WeakMap();
   emp.set(10,'Sachin');// TypeError as keys should be object
</script>

Пример 2

<script>
   let empMap = new WeakMap();
   // emp.set(10,'Sachin');// Error as keys should be object
   let e1= {ename:'Kiran'},
      e2 = {ename:'Kannan'},
      e3 = {ename:'Mohtashim'}

   empMap.set(e1,1001);
   empMap.set(e2,1002);
   empMap.set(e3,1003);

   console.log(empMap)
   console.log(empMap.get(e2))
   console.log(empMap.has(e2))
   empMap.delete(e1)
   console.log(empMap)
</script>

Вывод приведенного выше кода указан ниже -

{{…} => 1002, {…} => 1003, {…} => 1001}
1002
true
{{…} => 1002, {…} => 1003}

Набор

Набор - это неупорядоченный набор уникальных значений. Эта структура данных может содержать значения примитивных и объектных типов.

Синтаксис

Синтаксис для Set приведен ниже -

new Set([iterable])
new Set()

пример

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names)
</script>

Вывод приведенного выше кода приведен ниже -

{"A", "B", "C", "D"}

Проверка размера набора

Свойство size объекта Set можно использовать для запроса количества элементов в Set.

Синтаксис

Синтаксис для проверки размера набора упомянут ниже -

set.size

пример

<script>
   let names = new Set(['A','B','C','D']);
   console.log(names.size)
</script>

Вывод приведенного выше кода приведен ниже -

4

Итерация набора

Мы можем использовать forEach и for..ofциклы для перебора Set. Это показано в примере ниже -

пример

<script>
   let names= new Set(['A','B','C','D']);
   //iterate using forEach
   console.log('forEach')
   names.forEach(n=>console.log(n))
   
   console.log('for of..')
   
   //iterate using for..of
   for(let n of names){
      console.log(n)
   }
</script>

Вывод приведенного выше кода указан ниже -

forEach
A
B
C
D
for of..
A
B
C
D

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

Старший Нет Объект и карта
1 добавить (элемент)

Добавляет элемент в Набор

2 имеет (элемент)

Возвращает истину, если элемент найден; иначе возвращает false

3 удалить (элемент)

Удалить определенный элемент из набора

4 Чисто()

Удаляет все элементы из набора

WeakSet

Weakset слабо удерживает объекты, это означает, что объекты, хранящиеся в WeakSet, подлежат сборке мусора, если на них нет ссылок. WeakSets не повторяются и не имеютget метод.

<script>

   let e1 = {ename:'A'}
   let e2 ={ename:'B'}
   let e3 ={ename:'C'}

   let emps = new WeakSet();
   emps.add(e1);
   emps.add(e2)
   .add(e3);

   console.log(emps)
   console.log(emps.has(e1))
   emps.delete(e1);
   console.log(emps)
</script>

Вывод приведенного выше кода будет таким, как указано ниже -

WeakSet {{…}, {…}, {…}}
true
WeakSet {{…}, {…}}