ES6 - Mapy i zestawy

ES6 wprowadza dwie nowe struktury danych - maps i sets. Poznajmy je szczegółowo.

Mapy

Mapa to uporządkowany zbiór plików key-value pairs. Mapy są podobne do obiektów. Istnieją jednak pewne różnice między mapami a obiektami. Są one wymienione poniżej -

Sr.No Obiekt Mapa
1 Klucze nie mogą być typu obiektu Klucze mogą być dowolnego typu
2 Klucze nie są zamawiane Klucze są zamawiane
3 nie iterowalne iterowalne

Składnia

Składnia mapy jest podana poniżej -

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

Przykład

Poniższy przykład tworzy mapę przy użyciu konstruktora iterowalnego -

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

Wyjście powyższego kodu jest pokazane poniżej -

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

Sprawdzanie rozmiaru mapy

Właściwość size może służyć do określania liczby wartości przechowywanych na mapie.

Składnia

Składnia do sprawdzania rozmiaru mapy jest podana poniżej -

map_name.size

Przykład

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

Wyjście powyższego kodu jest pokazane poniżej -

3

Oto kilka typowych metod, których można używać do manipulowania mapami:

Sr.No Obiekt i mapa
1 set (klucz, wartość)

Dodaje klucz i wartość do mapy

2 Weź klucz)

Zwraca wartość, jeśli klucz jest dopasowany

3 ma (klucz)

Zwraca wartość true, jeśli istnieje element z określonym kluczem; else zwraca false

4 Klucze()

Zwraca iterator zawierający klucze dla każdego elementu w obiekcie mapy

5 wartości ()

Zwraca iterator zawierający wartości dla każdego elementu w obiekcie mapy

6 wpisy ()

Zwraca iterator zawierający pary klucz-wartość dla każdego elementu w Map

7 usuń (klucz)

Usuwa określony element z obiektu Map

WeakMap

WeakMap to mały plik subset of map. Klucze są słabo przywoływane, więc może być tylko nieprymitywne. Jeśli nie ma odniesienia do kluczy obiektów, zostanie poddane czyszczeniu.

  • nie iterowalne
  • każdy klucz jest typem obiektu

WeakMap pozwoli na czyszczenie pamięci, jeśli klucz nie ma odniesienia.

Składnia

Składnię WeakMap przedstawiono poniżej -

new WeakMap([iterable])

Przykład 1

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

Przykład 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>

Wynik powyższego kodu jest taki, jak wspomniano poniżej -

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

Zestaw

Zestaw to nieuporządkowana kolekcja unikalnych wartości. Ta struktura danych może zawierać wartości typu pierwotnego i obiektowego.

Składnia

Składnia zestawu jest podana poniżej -

new Set([iterable])
new Set()

Przykład

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

Wynik powyższego kodu jest taki, jak podano poniżej -

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

Sprawdzanie rozmiaru zestawu

Właściwość size obiektu Set może służyć do wykonywania zapytań dotyczących liczby elementów w zestawie.

Składnia

Składnia do sprawdzania rozmiaru zestawu jest wymieniona poniżej -

set.size

Przykład

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

Wynik powyższego kodu jest taki, jak podano poniżej -

4

Iterowanie zestawu

Możemy użyć forEach i for..ofpętle do iteracji w zestawie. Pokazuje to poniższy przykład -

Przykład

<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>

Wynik powyższego kodu jest taki, jak wspomniano poniżej -

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

Do manipulowania zestawem można użyć następujących metod -

Sr.No Obiekt i mapa
1 add (element)

Dodaje element do zestawu

2 ma (element)

Zwraca wartość true, jeśli znaleziono element; else zwraca false

3 usuń (element)

Usuń określony element z zestawu

4 jasny()

Czyści wszystkie elementy z zestawu

WeakSet

Weakset słabo przechowuje obiekty, co oznacza, że ​​obiekty przechowywane w WeakSet podlegają czyszczeniu pamięci, jeśli nie są przywoływane. WeakSets nie są iterowalne i nie mająget metoda.

<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>

Wynik powyższego kodu będzie taki, jak wspomniano poniżej -

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