În acest tutorial, veți afla despre JavaScript Maps și WeakMaps cu ajutorul unor exemple.
JavaScript ES6 a introdus două noi structuri de date, adică Map
și WeakMap
.
Harta este similară cu obiectele din JavaScript, care ne permite să stocăm elemente într-o pereche cheie / valoare .
Elementele dintr-o hartă sunt inserate într-o ordine de inserare. Cu toate acestea, spre deosebire de un obiect, o hartă poate conține obiecte, funcții și alte tipuri de date ca cheie.
Creați o hartă JavaScript
Pentru a crea un Map
, folosim new Map()
constructorul. De exemplu,
// create a Map const map1 = new Map(); // an empty map console.log(map1); // Map ()
Introduceți elementul pe hartă
După ce creați o hartă, puteți utiliza set()
metoda pentru a insera elemente în ea. De exemplu,
// create a set let map1 = new Map(); // insert key-value pair map1.set('info', (name: 'Jack', age: 26)); console.log(map1); // Map ("info" => (name: "Jack", age: 26))
De asemenea, puteți utiliza obiecte sau funcții ca taste. De exemplu,
// Map with object key let map2 = new Map(); let obj = (); map2.set(obj, (name: 'Jack', age: "26")); console.log(map2); // Map (() => (name: "Jack", age: "26"))
Elemente de hartă de acces
Puteți accesa Map
elemente folosind get()
metoda. De exemplu,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); // access the elements of a Map console.log(map1.get('info')); // (name: "Jack", age: "26")
Verificați elementele hărții
Puteți utiliza has()
metoda pentru a verifica dacă elementul se află într-o hartă. De exemplu,
const set1 = new Set((1, 2, 3)); let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); // check if an element is in Set console.log(map1.has('info')); // true
Eliminarea elementelor
Puteți utiliza clear()
și delete()
metoda pentru a elimina elemente dintr-o hartă.
În delete()
metoda returneaza true
daca o pereche de chei / valoare specificată există și a fost eliminat sau se întoarce altceva false
. De exemplu,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); // removing a particular element map1.delete('address'); // false console.log(map1); // Map ("info" => (name: "Jack", age: "26")) map1.delete('info'); // true console.log(map1); // Map ()
clear()
Metoda elimină toate perechile cheie / valoare dintr - un obiect hartă. De exemplu,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); // removing all element map1.clear(); // false console.log(map1); // Map ()
Dimensiunea hărții JavaScript
Puteți obține numărul de elemente dintr-o hartă folosind size
proprietatea. De exemplu,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); console.log(map1.size); // 1
Iterează printr-o hartă
Puteți itera prin elementele Hărții folosind metoda for … of loop sau forEach (). Elementele sunt accesate în ordinea de inserare. De exemplu,
let map1 = new Map(); map1.set('name', 'Jack'); map1.set('age', '27'); // looping through Map for (let (key, value) of map1) ( console.log(key + '- ' + value); )
Ieșire
nume- Jack vârsta- 27 de ani
De asemenea, puteți obține aceleași rezultate ca și programul de mai sus folosind forEach()
metoda. De exemplu,
// using forEach method() let map1 = new Map(); map1.set('name', 'Jack'); map1.set('age', '27'); // looping through Map map1.forEach(function(value, key) ( console.log(key + '- ' + value) ))
Iterează peste tastele hărții
Puteți itera pe hartă și obține cheia folosind keys()
metoda. De exemplu,
let map1 = new Map(); map1.set('name', 'Jack'); map1.set('age', '27'); // looping through the Map for (let key of map1.keys()) ( console.log(key) )
Ieșire
numele vârstei
Iterează peste valorile hărții
Puteți itera peste hartă și obține valorile folosind values()
metoda. De exemplu,
let map1 = new Map(); map1.set('name', 'Jack'); map1.set('age', '27'); // looping through the Map for (let values of map1.values()) ( console.log(values); )
Ieșire
Jack 27
Obțineți cheia / valorile hărții
Puteți itera peste hartă și puteți obține cheia / valoarea unei hărți folosind entries()
metoda. De exemplu,
let map1 = new Map(); map1.set('name', 'Jack'); map1.set('age', '27'); // looping through the Map for (let elem of map1.entries()) ( console.log(`$(elem(0)): $(elem(1))`); )
Ieșire
nume: Jack vârsta: 27 de ani
JavaScript Map vs Object
Hartă | Obiect |
---|---|
Maps can contain objects and other data types as keys. | Objects can only contain strings and symbols as keys. |
Maps can be directly iterated and their value can be accessed. | Objects can be iterated by accessing its keys. |
The number of elements of a Map can be determined by size property. | The number of elements of an object needs to be determined manually. |
Map performs better for programs that require the addition or removal of elements frequently. | Object does not perform well if the program requires the addition or removal of elements frequently. |
JavaScript WeakMap
The WeakMap is similar to a Map. However, WeakMap can only contain objects as keys. For example,
const weakMap = new WeakMap(); console.log(weakMap); // WeakMap () let obj = (); // adding object (element) to WeakMap weakMap.set(obj, 'hello'); console.log(weakMap); // WeakMap (() => "hello")
When you try to add other data types besides objects, WeakMap throws an error. For example,
const weakMap = new WeakMap(); // adding string as a key to WeakMap weakMap.set('obj', 'hello');
// throws error // TypeError: Attempted to set a non-object key in a WeakMap
WeakMap Methods
WeakMaps au metode get()
, set()
, delete()
și has()
. De exemplu,
const weakMap = new WeakMap(); console.log(weakMap); // WeakMap () let obj = (); // adding object (element) to WeakMap weakMap.set(obj, 'hello'); console.log(weakMap); // WeakMap (() => "hello") // get the element of a WeakMap console.log(weakMap.get(obj)); // hello // check if an element is present in WeakMap console.log(weakMap.has(obj)); // true // delete the element of WeakMap console.log(weakMap.delete(obj)); // true console.log(weakMap); // WeakMap ()
WeakMaps nu este iterabil
Spre deosebire de Maps, WeakMaps nu sunt iterabile. De exemplu,
const weakMap = new WeakMap(); console.log(weakMap); // WeakMap () let obj = (); // adding object (element) to WeakMap weakMap.set(obj, 'hello'); // looping through WeakMap for (let i of weakMap) ( console.log(i); // TypeError )
JavaScript Map
și WeakMap
au fost introduse în ES6 . Este posibil ca unele browsere să nu le accepte utilizarea. Pentru a afla mai multe, vizitați asistența JavaScript Map și asistența JavaScript WeakMap.