ä»ããç§ãã¡ã¯æ¬¡ã®ãããªè¤éãªãã¼ã¿æ§é ãç¥ã£ã¦ãã¾ã:
- ãã¼ä»ããããã³ã¬ã¯ã·ã§ã³ãæ ¼ç´ãããªãã¸ã§ã¯ã
- é åºä»ããããã³ã¬ã¯ã·ã§ã³ãæ ¼ç´ããé å
ããããå®éã«ã¯ããã ãã§ã¯ä¸ååã§ãããã®ããã«ãMap ã Set ãåå¨ãã¾ãã
Map
Map 㯠Object ã¨åãããã«ããã¼ä»ããããã¼ã¿é
ç®ã®éã¾ãã§ãã主ãªéã㯠Map ã¯ä»»æã®åã®ãã¼ã許å¯ãããã¨ã§ãã
主ãªã¡ã½ããã¯æ¬¡ã®éãã§ã:
new Map()â æ°ãã map ãä½ãã¾ã.map.set(key, value)â ãã¼ã§ãå¤ãæ ¼ç´ãã¾ã.map.get(key)â æå®ããããã¼ã®å¤ãè¿å´ãã¾ããmap ã«åå¨ããªãkeyã®å ´åã«ã¯undefinedã«ãªãã¾ã.map.has(key)â ãã¼ãåå¨ããå ´åã«trueãè¿ãã¾ããããã§ãªããã°falseã«ãªãã¾ã.map.delete(key)â ãã¼ã§å¤ãåé¤ãã¾ã.map.clear()â map ãã¯ãªã¢ãã¾ã.map.sizeâ ç¾å¨ã®è¦ç´ ã®æ°ã§ã.
ä¾:
let map = new Map();
map.set('1', 'str1'); // æååãã¼
map.set(1, 'num1'); // æ°å¤ãã¼
map.set(true, 'bool1'); // çå½å¤ãã¼
// é常ã®ãªãã¸ã§ã¯ããè¦ãã¦ãã¾ããï¼ãã¼ãæååã«å¤æãã¦ãã¾ããã
// Map ã¯åãç¶æãã¾ãããªã®ã§ããããã¯å¥ãã®ã§ã:
alert( map.get(1) ); // 'num1'
alert( map.get('1') ); // 'str1'
alert( map.size ); // 3
ä¸ã®éãããªãã¸ã§ã¯ãã¨ã¯éãããã¼ã¯æååã«ã¯å¤æããã¾ãããä»»æã®åã®ãã¼ãå©ç¨å¯è½ã§ãã
map[key] 㯠Map ã使ç¨ããæ£ããæ¹æ³ã§ã¯ããã¾ããä¾ãã°ãmap[key] = 2 ã®ããã«ãmap[key] ã§ãåä½ãã¾ããããã㯠map ãé常㮠JavaScript ãªãã¸ã§ã¯ãã¨ãã¦æ±ã£ã¦ããã®ã§ã対å¿ãããã¹ã¦ã®å¶éï¼æåå/ã·ã³ãã«ãã¼ã®ã¿ãªã©ï¼ããããã¨ãæå³ãã¾ãã
ãªã®ã§ãmap ã¡ã½ããã使ç¨ããã¹ãã§ã: set, get ãªã©.
Map ã¯ãã¼ã¨ãã¦ãªãã¸ã§ã¯ãã使ããã¨ãã§ãã¾ãã
ä¾:
let john = { name: "John" };
// åã¦ã¼ã¶ã«å¯¾ãã訪ååæ°ãä¿æãã¾ããã
let visitsCountMap = new Map();
// john 㯠map ã®ãã¼ã§ã
visitsCountMap.set(john, 123);
alert( visitsCountMap.get(john) ); // 123
ãªãã¸ã§ã¯ãããã¼ã¨ãã¦ä½¿ç¨ãããã¨ã¯ãæã注ç®ã«å¤ããéè¦ãª Map ã®æ©è½ã®1ã¤ã§ããåããã¨ã Object ã§è¡ããã¨ã¯ã§ãã¾ãããObject ã§ã¯ãã¼ã¨ãã¦æååã使ç¨ãããã¨ã¯åé¡ããã¾ãããããªãã¸ã§ã¯ãã使ç¨ãããã¨ã¯ã§ãã¾ããã
ãã£ã¦ã¿ã¾ããã:
let john = { name: "John" };
let ben = { name: "Ben" };
let visitsCountObj = {}; // ãªãã¸ã§ã¯ãã使ç¨
visitsCountObj[ben] = 234; // ben ãªãã¸ã§ã¯ãããã¼ã«ä½¿ç¨
visitsCountObj[john] = 123; // john ãªãã¸ã§ã¯ãããã¼ã«ä½¿ç¨ãben ãªãã¸ã§ã¯ãã¯ç½®æããã¾ã
// That's what got written!
alert( visitsCountObj["[object Object]"] ); // 123
visitsCountObj ã¯ãªãã¸ã§ã¯ããªã®ã§ãjohn ãªã©ã®ãã¹ã¦ã®ãã¼ãæååã«å¤æãã¾ãããã®ãããæååãã¼ "[object Object]" ã¨ãªãã¾ããééããªãããã¯æããã®ã§ã¯ããã¾ããã
Map ã¯ã©ã®ããã«ãã¼ãæ¯è¼ãããç価ã®ãã¹ããããããã«ãMap 㯠SameValueZero ã¢ã«ã´ãªãºã ã使ãã¾ãã大éæã«ã¯å³å¯ç価 === ã¨åãã§ãããéã㯠NaN 㯠NaN ã¨çããã¨ã¿ãªãããç¹ã§ãããªã®ã§ãNaN ãåæ§ã«ãã¼ã¨ãã¦ä½¿ããã¨ãã§ãã¾ãã
ãã®ã¢ã«ã´ãªãºã ã¯å¤æ´ãããã«ã¹ã¿ãã¤ãºãããã¨ã¯ã§ãã¾ããã
ãã¹ã¦ã® map.set å¼ã³åºã㯠map èªèº«ãè¿ãã®ã§ãå¼ã³åºãã âãã§ã¼ã³â ãããã¨ãã§ãã¾ã:
map.set('1', 'str1')
.set(1, 'num1')
.set(true, 'bool1');
Map ã§ã®ç¹°ãè¿ã/ã«ã¼ã
map ã§ã«ã¼ãããããã«ã¯ï¼ã¤ã®ã¡ã½ãããããã¾ã:
map.keys()â ãã¼ã«å¯¾ãã iterable ãè¿ãã¾ããmap.values()â å¤ã«å¯¾ãã iterable ãè¿ãã¾ããmap.entries()â ã¨ã³ããª[key, value]ãã® iterable ãè¿ãã¾ããããã¯for..ofã§ããã©ã«ãã§ä½¿ããã¾ãã
ä¾:
let recipeMap = new Map([
['cucumber', 500],
['tomatoes', 350],
['onion', 50]
]);
// ãã¼(éè)ã®å復
for (let vegetable of recipeMap.keys()) {
alert(vegetable); // cucumber, tomateos, onion
}
// å¤(é)ã®å復
for (let amount of recipeMap.values()) {
alert(amount); // 500, 350, 50
}
// [key, value] ã¨ã³ããªã¼ã®å復
for (let entry of recipeMap) { // recipeMap.entries() ã¨åã
alert(entry); // cucumber,500 (ãªã©)
}
ç¹°ãè¿ãã¯å¤ãæ¿å
¥ãããé ã§è¡ããã¾ããé常㮠Object ã¨ã¯éããMap ã¯ãã®é çªãä¿æãã¦ãã¾ãã
ããã«å ãã¦ãMap 㯠Array ã¨åãããã«ãçµã¿è¾¼ã¿ã® forEach ã¡ã½ãããæã£ã¦ãã¾ãã
// å (key, value) ãã¢ã«å¯¾ãã¦é¢æ°ãå®è¡
recipeMap.forEach( (value, key, map) => {
alert(`${key}: ${value}`); // cucumber: 500 etc
});
Object.entries: ãªãã¸ã§ã¯ããã Map ãçæ
Map ãçæããæããã¼ï¼å¤ã®ãã¢ããã¤é
å(ã¾ãã¯å¥ã®å復å¯è½(iterable)) ãæ¸¡ããã¨ãã§ãã¾ã:
// [key, value] ãã¢ã®é
å
let map = new Map([
['1', 'str1'],
[1, 'num1'],
[true, 'bool1']
]);
alert( map.get('1') ); // str1
é常ã®ãªãã¸ã§ã¯ããããããããã Map ãçæãããå ´åã¯ããªãã¸ã§ã¯ãã®ãã¼/å¤ã®ãã¢ã®é
åãããã®å½¢å¼ã§è¿ãçµã¿è¾¼ã¿ã®ã¡ã½ãã Object.entries(obj) ã使ç¨ã§ãã¾ãã
ãªã®ã§ã次ã®ããã«ãªãã¸ã§ã¯ããã map ã®åæåããããã¨ãã§ãã¾ã:
let obj = {
name: "John",
age: 30
};
let map = new Map(Object.entries(obj));
alert( map.get('name') ); // John
ããã§ãObject.entries ã¯ãã¼/å¤ã®ãã¢ã®é
åãè¿ãã¾ã: [ ["name","John"], ["age", 30] ]ããã㯠Map ãå¿
è¦ã¨ãããã®ã§ãã
Object.fromEntries: Map ãã ãªãã¸ã§ã¯ã
ã¤ãå
ç¨ãé常ã®ãªãã¸ã§ã¯ããã Object.entries(obj) ã使ç¨ã㦠Map ã使ããæ¹æ³ãè¦ã¾ããã
éã®ãã¨ããã Object.fromEntries ã¡ã½ãããããã¾ãã: [key, value] ãã¢ã®é
åãä¸ãããããããããªãã¸ã§ã¯ãã使ãã¾ã:
let prices = Object.fromEntries([
['banana', 1],
['orange', 2],
['meat', 4]
]);
// prices = { banana: 1, orange: 2, meat: 4 }
alert(prices.orange); // 2
Map ããé常ã®ãªãã¸ã§ã¯ããåå¾ããéã« Object.fromEntries ã使ãã¾ãã
E.g. Map ã«ãã¼ã¿ãä¿æãã¦ããããé常ã®ãªãã¸ã§ã¯ããæå¾
ãããµã¼ããã¼ãã£ã®ã³ã¼ãã«ãããå¿
è¦ãããå ´åã
ãã£ã¦ã¿ã¾ããã:
let map = new Map();
map.set('banana', 1);
map.set('orange', 2);
map.set('meat', 4);
let obj = Object.fromEntries(map.entries()); // é常ã®ãªãã¸ã§ã¯ãã使ãã¾ã (*)
// å®äº!
// obj = { banana: 1, orange: 2, meat: 4 }
alert(obj.orange); // 2
map.entries() ã¸ã®å¼ã³åºãã¯ãã¼/å¤ãã¢ã®é
åãè¿ããããã¯ã¾ãã« Object.fromEntries ã®æ£ããå½¢å¼ã§ãã
ã¾ããè¡ (*) ãããçããããã¨ãã§ãã¾ã:
let obj = Object.fromEntries(map); // omit .entries()
ããã¯åããã¨ã§ãããªããªããObject.fromEntries ã¯å¼æ°ã«å復å¯è½ãªãªãã¸ã§ã¯ããæå¾
ããããã§ããã¤ã¾ãé
åã§ããå¿
è¦ã¯ããã¾ãããããã¦ãmap ã®æ¨æºã®ã¤ãã¬ã¼ã·ã§ã³ã¯ map.entries() ã¨åããã¼/å¤ãè¿ãã¾ãããããã£ã¦ãmap ã¨åããã¼/å¤ãæã¤ãã¬ã¼ã³ãªãªãã¸ã§ã¯ããåå¾ã§ãã¾ãã
Set
Set ã¯ãç¹å¥ã¿ã¤ãã®ã³ã¬ã¯ã·ã§ã³ã§ãâå¤ã®éåâ ï¼ãã¼ãªãï¼ã§ããããããã®å¤ã¯ä¸åº¦ããç¾ãã¾ããã
主ãªã¡ã½ããã¯æ¬¡ã®éãã§ã:
new Set(iterable)â set ãä½ãã¾ãããªãã·ã§ã³ã§å¤ã®é å(ä»»æã® iterable ãæå®å¯è½)ãããå¯è½ã§ããset.add(value)â å¤ã追å ãã set èªèº«ãè¿ãã¾ããset.delete(value)â å¤ãåé¤ããvalueãå¼ã³åºãæã«åå¨ããã°true, ããã§ãªããã°falseãè¿ãã¾ããset.has(value)â set ã®ä¸ã«å¤ãåå¨ããã°trueãè¿ãããã以å¤ã¯falseã§ããset.clear()â set ããå ¨ã¦ãåé¤ãã¾ããset.sizeâ set ã®è¦ç´ æ°ã§ãã
主ãªç¹å¾´ã¯åãå¤ã§ã® set.add(value) ã®ç¹°ãè¿ãã®å¼ã³åºãã§ã¯ä½ãããªããã¨ã§ããSet ã§ã¯åå¤ã¯ä¸åº¦ããç¾ããªãããã§ãã
ä¾ãã°ã訪åè å ¨å¡ãè¦ãã¦ããããã§ããããç¹°ãè¿ã訪åãã¦ãéè¤ããªãããã«ãããã§ãã訪åè ã¯ä¸åº¦ã ã âã«ã¦ã³ãâ ãããå¿ è¦ãããã¾ãã
Set ã¯ããã«ç¸å¿ãããã®ã§ã:
let set = new Set();
let john = { name: "John" };
let pete = { name: "Pete" };
let mary = { name: "Mary" };
// 訪åãä½åº¦ãæ¥ãã¦ã¼ã¶ããã¾ã
set.add(john);
set.add(pete);
set.add(mary);
set.add(john);
set.add(mary);
// set ã¯ã¦ãã¼ã¯ãªå¤ã®ã¿ããã¼ããã¾ã
alert( set.size ); // 3
for (let user of set) {
alert(user.name); // John (ãã㦠Pete 㨠Mary)
}
Set ã®ä»£æ¿ã¯ãã¦ã¼ã¶ã®é
å㨠arr.find ã使ã£ã¦æ¿å
¥æ¯ã«éè¤ããã§ãã¯ããã³ã¼ãã§ãããããããã®ã¡ã½ããã¯ãã¹ã¦ã®è¦ç´ ããã§ãã¯ããããé
åå
¨ä½ãè¦ã¾ãããã®ããããã©ã¼ãã³ã¹ã¯ã¯ããã«æªãã§ããSet ã¯ä¸ææ§ãã§ãã¯ãé«éã«è¡ããããå
é¨çã«æé©åããã¦ãã¾ãã
Set ã§ã®ç¹°ãè¿ã
for..of ã¾ã㯠forEach ã使ããã¨ã§ set ãã«ã¼ããããã¨ãã§ãã¾ã:
let set = new Set(["oranges", "apples", "bananas"]);
for (let value of set) alert(value);
// forEach ã¨åã:
set.forEach((value, valueAgain, set) => {
alert(value);
});
é¢ç½ãç¹ã«æ³¨æãã¦ãã ãããSet ã®ä¸ã® forEach 颿°ã¯ï¼ã¤ã®å¼æ°ãæã£ã¦ãã¾ã: å¤(value), 次㫠åã³å¤(valueAgain), 次ã«ã¿ã¼ã²ããã®ãªãã¸ã§ã¯ãã§ããå®éã弿°ã«ã¯åãå¤ã2ååºç¾ãã¾ãã
ãã㯠forEach ã3ã¤ã®å¼æ°ãã㤠Map ã¨ã®äºææ§ã®ããã«ä½ããã¦ãã¾ããå°ãããããè¦ããããããã¾ãããããç¹å®ã±ã¼ã¹ã«ããã¦ç°¡åã« Map ã Set ã«ãã¾ããã®éãè¡ãã®ã«å½¹ç«ã¡ã¾ãã
Map ãã¤ãã¬ã¼ã·ã§ã³ã®ããã«æã£ã¦ããã¡ã½ããã¨åãã¡ã½ããããµãã¼ããã¦ãã¾ã:
set.keys()â å¤ã«å¯¾ãã iterable ãªãªãã¸ã§ã¯ããè¿ãã¾ããset.values()âset.keysã¨åãã§ãMapã¨ã®äºææ§ã®ããã§ããset.entries()â[value, value]ã®ã¨ã³ããªã®ããã® iterable ãªãªãã¸ã§ã¯ããè¿ãã¾ããMapã®äºææ§ã®ããã«åå¨ãã¾ãã
ãµããª
Map â ã¯ãã¼ä»ããããå¤ã®ã³ã¬ã¯ã·ã§ã³ã§ãã
ã¡ã½ããã¨ããããã£ã§ã:
new Map([iterable])â åæåã§ã¯ãªãã·ã§ã³ã§[key,value]ãã¢ã®iterable(e.g. é å ) ã§ map ã使ãã¾ãmap.set(key, value)â ãã¼ã§å¤ãä¿åãã¾ãmap.get(key)â ãã¼ã§å¤ãè¿ãã¾ããkeyã map ã«ãªãå ´åã¯undefinedãè¿ãã¾ãmap.has(key)âkeyãåå¨ããã°trueããããã§ãªããã°falseãè¿ãã¾ãmap.delete(key)â æå®ããããã¼ã§å¤ãåé¤ãã¾ãmap.clear()â map ãããã¹ã¦ãåé¤ãã¾ãmap.sizeâ ç¾å¨ã®è¦ç´ æ°ãè¿ãã¾ã
é常㮠Object ã¨ã®éãã§ã:
- ä»»æã®ãã¼ããªãã¸ã§ã¯ãããã¼ã«ãããã¨ãã§ãã¾ãã
- 追å ã®ä¾¿å©ãªã¡ã½ããã
sizeããããã£ã
Set â ã¯ã¦ãã¼ã¯å¤ã®ã³ã¬ã¯ã·ã§ã³ã§ãã
ã¡ã½ããã¨ããããã£ã§ã:
new Set([iterable])â set ãä½ãã¾ãããªãã·ã§ã³ã§å¤ã®é å(ä»»æã® iterable ãæå®å¯è½)ãããå¯è½ã§ããset.add(value)â å¤ã追å ãã set èªèº«ãè¿ãã¾ããset.delete(value)â å¤ãåé¤ããvalueãå¼ã³åºãæã«åå¨ããã°true, ããã§ãªããã°falseãè¿ãã¾ããset.has(value)â set ã®ä¸ã«å¤ãåå¨ããã°trueãè¿ãããã以å¤ã¯falseã§ããset.clear()â set ããå ¨ã¦ãåé¤ãã¾ããset.sizeâ set ã®è¦ç´ æ°ã§ãã
Map 㨠Set ã®ã¤ãã¬ã¼ã·ã§ã³ã¯å¸¸ã«æ¿å
¥é ã§è¡ããã¾ãããã®ããããããã®ã³ã¬ã¯ã·ã§ã³ãé åºä»ãããã¦ããªãã¨ã¯è¨ãã¾ããããè¦ç´ ãä¸¦ã¹æ¿ãããããã®çªå·ã§è¦ç´ ãç´æ¥åå¾ãããã¨ã¯ã§ãã¾ããã
ã³ã¡ã³ã
<code>ã¿ã°ã使ã£ã¦ãã ãããè¤æ°è¡ã®å ´åã¯<pre>ãã10è¡ãè¶ ããå ´åã«ã¯ãµã³ãããã¯ã¹ã使ã£ã¦ãã ãã(plnkr, JSBin, codepenâ¦)ã