ÐаÑаз ми знаÑмо пÑо наÑÑÑÐ¿Ð½Ñ ÑÐºÐ»Ð°Ð´Ð½Ñ ÑÑÑÑкÑÑÑи Ð´Ð°Ð½Ð¸Ñ :
- ÐбâÑкÑи Ð´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ ÑÐ¼ÐµÐ½Ð¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй.
- ÐаÑиви Ð´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ Ð²Ð¿Ð¾ÑÑÐ´ÐºÐ¾Ð²Ð°Ð½Ð¸Ñ ÐºÐ¾Ð»ÐµÐºÑÑй.
Ðле ÑÑого не завжди доÑÑаÑнÑо в ÑеалÑÐ½Ð¾Ð¼Ñ Ð¶Ð¸ÑÑÑ. ÐÑÑ ÑÐ¾Ð¼Ñ ÑÑнÑÑÑÑ Map Ñа Set.
Map
Map â Ñе колекÑÑÑ ÐºÐ»ÑÑ/знаÑеннÑ, Ñк Ñ Object. Ðле оÑновна вÑдмÑннÑÑÑÑ Ð¿Ð¾Ð»ÑÐ³Ð°Ñ Ð² ÑомÑ, Ñо Map дозволÑÑ Ð¼Ð°Ñи клÑÑÑ Ð±ÑдÑ-Ñкого ÑипÑ.
ÐеÑоди Ñа влаÑÑивоÑÑÑ:
new Map()â ÑÑвоÑÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ.map.set(key, value)â збеÑÑÐ³Ð°Ñ Ð·Ð½Ð°ÑеннÑvalueза клÑÑемkey.map.get(key)â повеÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð·Ð° клÑÑем; повеÑÑаÑundefinedÑкÑоkeyÐ½ÐµÐ¼Ð°Ñ Ð² колекÑÑÑ.map.has(key)â повеÑÑаÑtrueÑкÑоkeyÑÑнÑÑ, ÑнакÑеfalse.map.delete(key)â видалÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ (паÑÑ ÐºÐ»ÑÑ/знаÑеннÑ) за клÑÑем.map.clear()â видалÑÑ Ð²ÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñи колекÑÑÑ.map.sizeâ повеÑÑÐ°Ñ Ð¿Ð¾ÑоÑÐ½Ñ ÐºÑлÑкÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв.
ÐапÑиклад:
let map = new Map();
map.set('1', 'str1'); // ÑÑдок Ñк клÑÑ
map.set(1, 'num1'); // ÑиÑÑа Ñк клÑÑ
map.set(true, 'bool1'); // бÑлеве знаÑÐµÐ½Ð½Ñ Ñк клÑÑ
// памâÑÑаÑÑе звиÑайний обâÑÐºÑ `Object`? ÐÑн пеÑеÑвоÑÑÑ Ð²ÑÑ ÐºÐ»ÑÑÑ Ð² ÑÑдок
// Map збеÑÑÐ³Ð°Ñ Ñип клÑÑÑв, Ñак Ñо в ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð¼Ð¸ оÑÑимаÑмо 2 ÑÑзниÑ
знаÑеннÑ:
alert( map.get(1) ); // 'num1'
alert( map.get('1') ); // 'str1'
alert( map.size ); // 3
Як ми баÑимо, на вÑдмÑÐ½Ñ Ð²Ñд обâÑкÑÑв, клÑÑÑ Ð½Ðµ бÑли пÑÐ¸Ð²ÐµÐ´ÐµÐ½Ñ Ð´Ð¾ ÑÑдкÑв. Ðожна викоÑиÑÑовÑваÑи бÑдÑ-ÑÐºÑ Ñипи Ð´Ð°Ð½Ð¸Ñ Ð´Ð»Ñ ÐºÐ»ÑÑÑв.
map[key] не Ñ Ð¿ÑавилÑним меÑодом викоÑиÑÑÐ°Ð½Ð½Ñ MapХоÑа map[key] Ñакож пÑаÑÑÑ, але Ñакий ÑпоÑÑб пÑиÑвоÑÐ½Ð½Ñ map[key] = 2 викоÑиÑÑовÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ Ñк звиÑайний JavaScript обâÑкÑ, ÑобÑо Ð½Ð°ÐºÐ»Ð°Ð´Ð°Ñ Ð²ÑдповÑÐ´Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ (ÑÑлÑки Ñипи ÑÑдки/Ñимволи Ñк клÑÑÑ Ñа ÑнÑе).
Таким Ñином ми Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ ÐºÐ¾ÑиÑÑÑваÑиÑÑ map меÑодами: set, get Ñ Ñак далÑ.
Map Ñакож може викоÑиÑÑовÑваÑи обâÑкÑи Ñк клÑÑÑ.
ÐапÑиклад:
let ivan = { name: "Ðван" };
// збеÑежÑмо кÑлÑкÑÑÑÑ Ð²ÑдвÑдÑÐ²Ð°Ð½Ñ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ коÑиÑÑÑваÑа
let visitsCountMap = new Map();
// обâÑÐºÑ ivan -- Ñе клÑÑ Ð´Ð»Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð² колекÑÑÑ Map
visitsCountMap.set(ivan, 123);
alert( visitsCountMap.get(ivan) ); // 123
ÐбâÑкÑи в ÑкоÑÑÑ ÐºÐ»ÑÑÑв â Ñе одна з вÑдомиÑ
можливоÑÑей колекÑÑÑ Map, ÑÐºÑ ÑаÑÑо викоÑиÑÑовÑÑÑÑ. У звиÑÐ°Ð¹Ð½Ð¾Ð¼Ñ Ð¾Ð±âÑкÑÑ Object, ми можемо викоÑиÑÑаÑи клÑÑÑ-ÑÑдки, пÑоÑе клÑÑÑ-обâÑкÑи â вже нÑ.
РозглÑнÑмо Ñакий пÑиклад:
let ivan = { name: "Ðван" };
let bohdan = { name: "Ðогдан" };
let visitsCountObj = {}; // оголоÑимо звиÑайний обâÑкÑ
visitsCountObj[bohdan] = 234; // викоÑиÑÑаÑмо обâÑÐºÑ `bohdan` Ñк клÑÑ
visitsCountObj[ivan] = 123; // викоÑиÑÑаÑмо `ivan` обâÑÐºÑ Ñк клÑÑ, `bohdan` обâÑÐºÑ Ð±Ñде пеÑезапиÑаний
// ÐÑÑ Ñк Ñе бÑло запиÑано!
alert( visitsCountObj["[object Object]"] ); // 123
ÐÑкÑлÑки visitsCountObj â Ñе обâÑкÑ, вÑн конвеÑÑÑÑ Ð²ÑÑ ÐºÐ»ÑÑÑ ÑÐ¸Ð¿Ñ Object (ÑÐ°ÐºÑ Ñк ivan Ñ bohdan) до ÑÑдка "[object Object]". Це однознаÑно не Ñой ÑезÑлÑÑаÑ, Ñкий ми оÑÑкÑÑмо.
Map поÑÑвнÑÑ ÐºÐ»ÑÑÑÐоÑÑвнÑÑÑи клÑÑÑ, обâÑÐºÑ Map викоÑиÑÑовÑÑ Ð°Ð»Ð³Ð¾ÑиÑм SameValueZero. Це майже Ñаке ж поÑÑвнÑннÑ, Ñо Ñ ===, з ÑÑÑÑ Ð»Ð¸Ñе ÑÑзниÑеÑ, Ñо NaN вважаÑÑÑÑÑ ÑÑвним NaN. Таким Ñином NaN може Ñакож бÑÑи викоÑиÑÑаний Ñк клÑÑ.
Цей алгоÑиÑм не може бÑÑи замÑнений або модиÑÑкований.
Ðожен виклик map.set повеÑÑÐ°Ñ Ð¾Ð±âÑÐºÑ map, Ñаким Ñином ми можемо обâÑднаÑи виклики в ланÑÑжок:
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
ÐеÑебÑÑ Map
ÐÐ»Ñ Ð¿ÐµÑебоÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ Map Ñ 3 меÑода:
map.keys()â повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑÐ¾Ñ Ð´Ð»Ñ ÐºÐ»ÑÑÑв,map.values()â повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑÐ¾Ñ Ð´Ð»Ñ Ð·Ð½Ð°ÑенÑ,map.entries()â повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑÐ¾Ñ Ð·Ñ Ð·Ð½Ð°ÑеннÑми Ð²Ð¸Ð´Ñ [клÑÑ, знаÑеннÑ], Ñей ваÑÑÐ°Ð½Ñ Ñипово викоÑиÑÑовÑÑÑÑÑÑ Ð·for..of.
ÐапÑиклад:
let recipeMap = new Map([
['огÑÑок', 500],
['помÑдоÑи', 350],
['ÑибÑлÑ', 50]
]);
// пеÑебиÑаÑмо клÑÑÑ (овоÑÑ)
for (let vegetable of recipeMap.keys()) {
alert(vegetable); // огÑÑок, помÑдоÑи, ÑибÑлÑ
}
// пеÑебиÑаÑмо знаÑÐµÐ½Ð½Ñ (кÑлÑкÑÑÑÑ)
for (let amount of recipeMap.values()) {
alert(amount); // 500, 350, 50
}
// пеÑебÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв Ñ ÑоÑмаÑÑ [клÑÑ, знаÑеннÑ]
for (let entry of recipeMap) { // Ñе ж Ñаме, Ñо recipeMap.entries()
alert(entry); // огÑÑок,500 (Ñ Ñак далÑ)
}
Ðа вÑдмÑÐ½Ñ Ð²Ñд звиÑайниÑ
обâÑкÑÑв Object, в Map пеÑебÑÑ Ð²ÑдбÑваÑÑÑÑÑ Ð² ÑÐ¾Ð¼Ñ Ð¶ поÑÑдкÑ, в ÑÐºÐ¾Ð¼Ñ Ð²ÑдбÑвалоÑÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв.
ÐÑÑм ÑÑого, Map Ð¼Ð°Ñ Ð²Ð±Ñдований меÑод forEach, ÑÑ
ожий з вбÑдованим меÑодом маÑивÑв Array:
// виконÑÑмо ÑÑнкÑÑÑ Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ñ Ð¿Ð°Ñи (клÑÑ, знаÑеннÑ)
recipeMap.forEach( (value, key, map) => {
alert(`${key}: ${value}`); // огÑÑок: 500 Ñ Ñак далÑ
});
Object.entries: Map з Object
ÐÑи ÑÑвоÑÐµÐ½Ð½Ñ Map ми можемо вказаÑи маÑив (або ÑнÑий обâÑкÑ-ÑÑеÑаÑоÑ) з паÑами клÑÑ-знаÑÐµÐ½Ð½Ñ Ð´Ð»Ñ ÑнÑÑÑалÑзаÑÑÑ, Ñк ÑÑÑ:
// маÑив Ð¿Ð°Ñ [клÑÑ, знаÑеннÑ]
let map = new Map([
['1', 'str1'],
[1, 'num1'],
[true, 'bool1']
]);
alert( map.get('1') ); // str1
ЯкÑо Ñ Ð½Ð°Ñ Ð²Ð¶Ðµ Ñ Ð·Ð²Ð¸Ñайний обâÑкÑ, Ñ Ð¼Ð¸ б Ñ
оÑÑли ÑÑвоÑиÑи з нÑого Map, Ñо допоможе вбÑдований меÑод Object.entries(obj), коÑÑий оÑÑимÑÑ Ð¾Ð±âÑÐºÑ Ñ Ð¿Ð¾Ð²ÐµÑÑÐ°Ñ Ð¼Ð°Ñив Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð½Ñого, Ñк Ñаз в ÑÑÐ¾Ð¼Ñ ÑоÑмаÑÑ.
Таким Ñином ми можемо ÑÑвоÑиÑи Map з обâÑкÑа наÑÑÑпним Ñином:
let obj = {
name: "Ðван",
age: 30
};
let map = new Map(Object.entries(obj));
alert( map.get('name') ); // Ðван
Ð ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Object.entries повеÑÑÐ°Ñ Ð¼Ð°Ñив Ð¿Ð°Ñ ÐºÐ»ÑÑ-знаÑеннÑ: [ ["name", "Ðван"], ["age", 30] ]. Це Ñаме Ñе, Ñо поÑÑÑбно Ð´Ð»Ñ ÑÑвоÑÐµÐ½Ð½Ñ Map.
Object.fromEntries: Object з Map
Ðи Ñойно ÑÑвоÑÑвали Map з пÑоÑÑого обâÑкÑа за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Object.entries(obj).
Ðи можемо викоÑиÑÑаÑи Object.fromEntries меÑод, Ñкий Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ Ð·Ð²Ð¾ÑоÑÐ½Ñ Ð´ÑÑ: ÑÑанÑÑоÑмÑÑ Ð¾ÑÑиманий маÑив Ð¿Ð°Ñ [клÑÑ, знаÑеннÑ] в обâÑкÑ. ÐапÑиклад:
let prices = Object.fromEntries([
['банан', 1],
['апелÑÑин', 2],
['ÑблÑко', 4]
]);
// ÑÐµÐ¿ÐµÑ prices = { банан: 1, апелÑÑин: 2, ÑблÑко: 4 }
alert(prices.апелÑÑин); // 2
Ðи можемо викоÑиÑÑаÑи Object.fromEntries, Ñоб оÑÑимаÑи звиÑайний обâÑÐºÑ Ð· Map.
ÐапÑиклад, ми маÑмо Ð´Ð°Ð½Ñ Ð² Map, але поÑÑÑбно ÑÑ
пеÑедаÑи в ÑÑоÑоннÑй код, Ñкий ÑÐµÐºÐ°Ñ Ð¿ÑоÑÑий обâÑкÑ.
ÐÑÑ Ñк Ñе зÑобиÑи:
let map = new Map();
map.set('банан', 1);
map.set('апелÑÑин', 2);
map.set('ÑблÑко', 4);
let obj = Object.fromEntries(map.entries()); // Ñобимо пÑоÑÑий обâÑÐºÑ (*)
// ÐоÑово!
// obj = { банан: 1, апелÑÑин: 2, ÑблÑко: 4 }
alert(obj.апелÑÑин); // 2
Ðиклик map.entries() повеÑÑÐ°Ñ Ð¼Ð°Ñив Ð¿Ð°Ñ ÐºÐ»ÑÑ/знаÑеннÑ, Ñк Ñаз в поÑÑÑÐ±Ð½Ð¾Ð¼Ñ ÑоÑмаÑÑ Ð´Ð»Ñ Object.fromEntries.
Ðи могли б напиÑаÑи ÑÑдок (*) Ñе коÑоÑÑе:
let obj = Object.fromEntries(map); // пÑибÑаÑи .entries()
Це Ñе ж Ñаме, оÑкÑлÑки Object.fromEntries ÑÐµÐºÐ°Ñ Ð°ÑгÑменÑом обâÑкÑ-ÑÑеÑаÑоÑ, не обовâÑзково маÑив. РпеÑебÑÑ map ÑкÑаз повеÑÑÐ°Ñ Ð¿Ð°Ñи клÑÑ/знаÑеннÑ, Ñк Ñ map.entries(). Так Ñо в пÑдÑÑÐ¼ÐºÑ Ð¼Ð¸ маÑимемо звиÑайний обâÑÐºÑ Ð· Ñими ж клÑÑами/знаÑеннÑми, Ñо Ñ Ð² map.
Set
ÐбâÑÐºÑ Set â Ñе оÑобливий Ñип колекÑÑÑ: âмножинаâ знаÑÐµÐ½Ñ (без клÑÑÑв), де кожне знаÑÐµÐ½Ð½Ñ Ð¼Ð¾Ð¶Ðµ зâÑвлÑÑиÑÑ ÑÑлÑки Ñаз.
ÐÑÐ½Ð¾Ð²Ð½Ñ Ð¼ÐµÑоди:
new Set([iterable])â ÑÑвоÑÑÑSet, ÑкÑо аÑгÑменÑом виÑÑÑÐ¿Ð°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑоÑ, ÑÐ¾Ð´Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ ÐºÐ¾Ð¿ÑÑÑÑÑÑÑ Ð²Set.set.add(value)â Ð´Ð¾Ð´Ð°Ñ Ð½Ð¾Ð²Ðµ знаÑÐµÐ½Ð½Ñ Ð´Ð¾Set, повеÑÑаÑSet.set.delete(value)â видалÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð·Set, повеÑÑаÑtrue, ÑкÑоvalueнаÑвне в Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ñ Ð·Ð½Ð°ÑÐµÐ½Ñ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ Ð¼ÐµÑодÑ, ÑнакÑеfalse.set.has(value)â повеÑÑаÑtrue, ÑкÑоvalueпÑиÑÑÑÐ½Ñ Ð² множинÑSet, ÑнакÑеfalse.set.clear()â видалÑÑ Ð²ÑÑ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ð¸Set.set.sizeâ повеÑÑÐ°Ñ ÐºÑлÑкÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв в множинÑ.
Ð Ð¾Ð´Ð·Ð¸Ð½ÐºÐ¾Ñ Set Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸ set.add(value), Ñо повÑоÑÑÑÑÑÑÑ Ð· однаковими знаÑеннÑми value. ÐовÑоÑÐ½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÐ¸ ÑÑого меÑÐ¾Ð´Ñ Ð½Ðµ змÑнÑÑÑÑ Set. Це пÑиÑина Ñого, Ñо кожне знаÑÐµÐ½Ð½Ñ Ð·âÑвлÑÑÑÑÑÑ ÑÑлÑки один Ñаз.
ÐапÑиклад, ми оÑÑкÑÑмо гоÑÑей, Ñ Ð½Ð°Ð¼ Ð½ÐµÐ¾Ð±Ñ Ñдно ÑклаÑÑи ÑÑ ÑпиÑок. Ðле повÑоÑÐ½Ñ Ð·Ð°Ð¿Ð¸Ñи не Ð¿Ð¾Ð²Ð¸Ð½Ð½Ñ Ð¿ÑизводиÑи до дÑблÑкаÑÑв. Ðожен гÑÑÑÑ Ð¿Ð¾Ð²Ð¸Ð½ÐµÐ½ зâÑвиÑиÑÑ Ð² ÑпиÑÐºÑ Ð»Ð¸Ñе один Ñаз.
Ðножина Set â Ñе Ñаме Ñе, Ñо поÑÑÑбно Ð´Ð»Ñ ÑÑого:
let set = new Set();
let ivan = { name: "Ðван" };
let petro = { name: "ÐеÑÑо" };
let maria = { name: "ÐаÑÑÑ" };
// пÑдÑаÑ
овÑÑмо гоÑÑей, деÑÐºÑ Ð¿ÑиÑ
одÑÑÑ ÐºÑлÑка ÑазÑв
set.add(ivan);
set.add(petro);
set.add(maria);
set.add(ivan);
set.add(maria);
// set збеÑÑÐ³Ð°Ñ ÑÑлÑки 3 ÑнÑкалÑниÑ
знаÑеннÑ
alert( set.size ); // 3
for (let user of set) {
alert(user.name); // "Ðван" (ÑÐ¾Ð´Ñ "ÐеÑÑо" Ñ "ÐаÑÑÑ")
}
ÐлÑÑеÑнаÑÐ¸Ð²Ð¾Ñ Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ð¸ Set може виÑÑÑпаÑи маÑив Ð´Ð»Ñ Ð·Ð±ÐµÑÑÐ³Ð°Ð½Ð½Ñ Ð³Ð¾ÑÑей Ñ Ð´Ð¾Ð´Ð°Ñковий код Ð´Ð»Ñ Ð¿ÐµÑевÑÑки вже наÑвного елеменÑа за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ arr.find. Ðле в ÑÑÐ¾Ð¼Ñ Ð²Ð¸Ð¿Ð°Ð´ÐºÑ Ð±Ñде гÑÑÑа пÑодÑкÑивнÑÑÑÑ, ÑÐ¾Ð¼Ñ Ñо arr.find пÑоÑ
одиÑÑ Ð²ÐµÑÑ Ð¼Ð°Ñив Ð´Ð»Ñ Ð¿ÐµÑевÑÑки наÑвноÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñа. Ðножина Set кÑаÑе опÑимÑзована Ð´Ð»Ñ Ð¿ÐµÑевÑÑки ÑнÑкалÑноÑÑÑ.
ÐеÑебÑÑ Ð¾Ð±âÑкÑа Set
Ðи можемо пеÑебÑаÑи вмÑÑÑ Ð¾Ð±âÑкÑа set Ñк за Ð´Ð¾Ð¿Ð¾Ð¼Ð¾Ð³Ð¾Ñ Ð¼ÐµÑÐ¾Ð´Ñ for..of, Ñак Ñ Ð²Ð¸ÐºÐ¾ÑиÑÑовÑÑÑи forEach:
let set = new Set(["апелÑÑини", "ÑблÑка", "банани"]);
for (let value of set) alert(value);
// Ñе ж Ñаме з forEach:
set.forEach((value, valueAgain, set) => {
alert(value);
});
ÐаÑважимо ÑÑÐºÐ°Ð²Ñ ÑÑÑ. ФÑнкÑÑÑ Ð² forEach Ñ Set Ð¼Ð°Ñ 3 аÑгÑменÑи: знаÑÐµÐ½Ð½Ñ âvalueâ, поÑÑм Ð·Ð½Ð¾Ð²Ñ Ñе Ñаме знаÑÐµÐ½Ð½Ñ âvalueAgainâ, Ñ ÑÑлÑки поÑÑм ÑÑлÑовий обâÑкÑ. Це дÑйÑно Ñак, знаÑÐµÐ½Ð½Ñ Ð·âÑвлÑÑÑÑÑÑ Ð² ÑпиÑÐºÑ Ð°ÑгÑменÑÑв двÑÑÑ.
Це зÑоблено Ð´Ð»Ñ ÑÑмÑÑноÑÑÑ Ð· обâÑкÑом Map, в ÑÐºÐ¾Ð¼Ñ ÐºÐ¾Ð»Ð±ÐµÐº forEach Ð¼Ð°Ñ 3 аÑгÑменÑа. ÐиглÑÐ´Ð°Ñ ÑÑоÑ
и дивно, але в деÑкиÑ
випадкаÑ
може допомогÑи легко замÑниÑи Map на Set Ñ Ð½Ð°Ð²Ð¿Ð°ÐºÐ¸.
Set Ð¼Ð°Ñ ÑÑ Ð¶ вбÑÐ´Ð¾Ð²Ð°Ð½Ñ Ð¼ÐµÑоди, Ñо Ñ Map:
set.keys()â повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑÐ¾Ñ Ð´Ð»Ñ Ð·Ð½Ð°ÑенÑ,set.values()â Ñе ж Ñаме, Ñоset.keys(), Ð´Ð»Ñ ÑÑмÑÑноÑÑÑ Ð·Map,set.entries()â повеÑÑÐ°Ñ Ð¾Ð±âÑкÑ-ÑÑеÑаÑÐ¾Ñ Ð´Ð»Ñ Ð¿Ð°Ñ Ð²Ð¸Ð´Ñ[знаÑеннÑ, знаÑеннÑ], пÑиÑÑÑнÑй Ð´Ð»Ñ ÑÑмÑÑноÑÑÑ Ð·Map.
ÐÑдÑÑмки
Map â Ñе колекÑÑÑ ÐºÐ»ÑÑ/знаÑеннÑ.
ÐеÑоди Ñа влаÑÑивоÑÑÑ:
new Map([iterable])â ÑÑвоÑÑÑ ÐºÐ¾Ð»ÐµÐºÑÑÑ, можна вказаÑиобâÑкÑ-ÑÑеÑаÑоÑ(зазвиÑай маÑив) з паÑ[клÑÑ, знаÑеннÑ]Ð´Ð»Ñ ÑнÑÑÑалÑзаÑÑÑ.map.set(key, value)â запиÑÑÑ Ð¿Ð¾ клÑÑÑkeyзнаÑеннÑvalue.map.get(key)â повеÑÑÐ°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ Ð¿Ð¾keyабоundefined, ÑкÑо клÑÑkeyвÑдÑÑÑнÑй.map.has(key)â повеÑÑаÑtrue, ÑкÑо клÑÑkeyпÑиÑÑÑнÑй в колекÑÑÑ, ÑнакÑеfalse.map.delete(key)â видалÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð¿Ð¾ клÑÑÑkey. ÐовеÑÑаÑtrue, ÑкÑоkeyÑÑнÑÑ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ ÑÑнкÑÑÑ, ÑнакÑеfalse.map.clear()â оÑиÑÐ°Ñ ÐºÐ¾Ð»ÐµÐºÑÑÑ Ð²Ñд вÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв.map.sizeâ повеÑÑÐ°Ñ Ð¿Ð¾ÑоÑÐ½Ñ ÐºÑлÑкÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв.
ÐÑдмÑнноÑÑÑ Ð²Ñд звиÑайного обâÑкÑа Object:
- Що завгодно може бÑÑи клÑÑем, в ÑÐ¾Ð¼Ñ ÑиÑÐ»Ñ Ñ Ð¾Ð±âÑкÑи.
- РдодаÑÐºÐ¾Ð²Ñ Ð¼ÐµÑоди, влаÑÑивÑÑÑÑ
size.
Set â колекÑÑÑ ÑнÑкалÑниÑ
знаÑенÑ, Ñак звана âмножинаâ.
ÐеÑоди Ñа влаÑÑивоÑÑÑ:
new Set([iterable])â ÑÑвоÑÑÑSet, можна вказаÑиобâÑкÑ-ÑÑеÑаÑоÑ(зазвиÑай маÑив).set.add(value)â Ð´Ð¾Ð´Ð°Ñ Ð·Ð½Ð°ÑÐµÐ½Ð½Ñ (ÑкÑо воно вже Ñ, Ñо нÑÑого не ÑобиÑÑ), повеÑÑÐ°Ñ Ñой же обâÑкÑset.set.delete(value)â видалÑÑ Ð·Ð½Ð°ÑеннÑ, повеÑÑаÑtrueÑкÑоvalueбÑло в Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ñ Ð½Ð° Ð¼Ð¾Ð¼ÐµÐ½Ñ Ð²Ð¸ÐºÐ»Ð¸ÐºÑ, ÑнакÑеfalse.set.has(value)â повеÑÑаÑtrue, ÑкÑо знаÑÐµÐ½Ð½Ñ Ð¿ÑиÑÑÑнÑй в множинÑ, ÑнакÑеfalse.set.clear()â видалÑÑ Ð²ÑÑ Ð½Ð°ÑÐ²Ð½Ñ Ð·Ð½Ð°ÑеннÑ.set.sizeâ повеÑÑÐ°Ñ ÐºÑлÑкÑÑÑÑ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв Ñ Ð¼Ð½Ð¾Ð¶Ð¸Ð½Ñ.
ÐеÑебÑÑ Map Ñ Set завжди здÑйÑнÑÑÑÑÑÑ Ð² поÑÑÐ´ÐºÑ Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ ÐµÐ»ÐµÐ¼ÐµÐ½ÑÑв, Ñак Ñо не можна ÑказаÑи, Ñо Ñе невпоÑÑÐ´ÐºÐ¾Ð²Ð°Ð½Ñ ÐºÐ¾Ð»ÐµÐºÑÑÑ, але помÑнÑÑи поÑÑдок елеменÑÑв або оÑÑимаÑи ÐµÐ»ÐµÐ¼ÐµÐ½Ñ Ð±ÐµÐ·Ð¿Ð¾ÑеÑеднÑо по його номеÑÑ Ð½Ðµ можна.
ÐоменÑаÑÑ
<code>, Ð´Ð»Ñ ÐºÑлÑÐºÐ¾Ñ ÑÑдкÑв â обгоÑнÑÑÑ ÑÑ Ñегом<pre>, Ð´Ð»Ñ Ð¿Ð¾Ð½Ð°Ð´ 10 ÑÑдкÑв â викоÑиÑÑовÑйÑе пÑÑоÑниÑÑ (plnkr, jsbin, codepenâ¦)