В този урок ще научите за JavaScript Maps и WeakMaps с помощта на примери.
JavaScript ES6 представи две нови структури от данни, т.е. Map
и WeakMap
.
Map е подобен на обектите в JavaScript, което ни позволява да съхраняваме елементи в двойка ключ / стойност .
Елементите в Карта се вмъкват в ред за вмъкване. Въпреки това, за разлика от обект, картата може да съдържа обекти, функции и други типове данни като ключ.
Създайте JavaScript карта
За да създадем a Map
, използваме new Map()
конструктора. Например,
// create a Map const map1 = new Map(); // an empty map console.log(map1); // Map ()
Вмъкване на елемент в картата
След като създадете карта, можете да използвате set()
метода, за да вмъкнете елементи в нея. Например,
// 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))
Можете също да използвате обекти или функции като ключове. Например,
// 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"))
Елементи на картата за достъп
Можете да получите достъп до Map
елементи, използвайки get()
метода. Например,
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")
Проверете елементите на картата
Можете да използвате has()
метода, за да проверите дали елементът е в Map. Например,
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
Премахване на елементи
Можете да използвате метода clear()
и и delete()
за премахване на елементи от карта.
На delete()
връща метод true
, ако съществува определен двойка ключ / стойност и е била премахната или друг възвращаемост false
. Например,
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()
метод премахва всички двойки ключ / стойност от обект Карта. Например,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); // removing all element map1.clear(); // false console.log(map1); // Map ()
Размер на картата на JavaScript
Можете да получите броя на елементите в Карта, като използвате size
свойството. Например,
let map1 = new Map(); map1.set('info', (name: 'Jack', age: "26")); console.log(map1.size); // 1
Итерация през карта
Можете да прегледате елементите на картата, използвайки метода for … of или forEach (). Елементите са достъпни в реда на вмъкване. Например,
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); )
Изход
име- Джак възраст- 27
Можете също така да получите същите резултати като горната програма, използвайки forEach()
метода. Например,
// 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) ))
Итерация над ключовете на картата
Можете да прегледате картата и да получите ключа с помощта на keys()
метода. Например,
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) )
Изход
име възраст
Итерирайте над стойностите на картата
Можете да прегледате картата и да получите стойностите с помощта на values()
метода. Например,
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); )
Изход
Джак 27
Вземете ключ / стойности на картата
Можете да прегледате картата и да получите ключа / стойността на картата, използвайки entries()
метода. Например,
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))`); )
Изход
име: Джак възраст: 27
JavaScript карта срещу обект
Карта | Обект |
---|---|
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 имат методи get()
, set()
, delete()
, и has()
. Например,
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 не са итеративни
За разлика от Maps, WeakMaps не са итерируеми. Например,
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
и WeakMap
бяха въведени в ES6 . Някои браузъри може да не поддържат тяхното използване. За да научите повече, посетете поддръжката на JavaScript карта и поддръжката на JavaScript WeakMap.