Map.prototype.getOrInsert()
Baseline
2026
æè¿å©ç¨å¯è½
2026å¹´2æä»¥éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
getOrInsert() 㯠Map ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ããã®å¯¾å¿è¡¨ (Map) å
ã§æå®ããããã¼ã«å¯¾å¿ããå¤ãè¿ãã¾ãããã¼ãåå¨ããªãå ´åãæå®ãããããã©ã«ãå¤ãæã¤æ°ããé
ç®ãæ¿å
¥ããæ¿å
¥ãããå¤ãè¿ãã¾ãã
ããã©ã«ãå¤ã®è¨ç®ã«ã³ã¹ãããããå ´åã¯ã代ããã« Map.prototype.getOrInsertComputed() ã使ç¨ãããã¨ãæ¤è¨ãã¦ãã ãããããã¯ã³ã¼ã«ããã¯ãåãåããå®éã«å¿
è¦ã«ãªã£ãå ´åã«ã®ã¿ããã©ã«ãå¤ãè¨ç®ãã¾ãã
試ãã¦ã¿ã¾ããã
const map = new Map([["bar", "foo"]]);
console.log(map.getOrInsert("bar", "default"));
// äºæ³ãããçµæ: "foo"
console.log(map.getOrInsert("baz", "default"));
// äºæ³ãããçµæ: "default"
æ§æ
getOrInsert(key, defaultValue)
弿°
key-
kMapãªãã¸ã§ã¯ãããå¤ãåå¾ããé ç®ã®ãã¼ããªãã¸ã§ã¯ãã®ãã¼ã¯å¤ã§ã¯ãªãåç §ã¨ãã¦æ¯è¼ããã¾ãã defaultValue-
ãã¼ã
Mapãªãã¸ã§ã¯ãå ã«åå¨ããªãã£ãå ´åã«ãæ¿å ¥ãã¦è¿ãå¤ã§ãã
è¿å¤
ãã® WMap ãªãã¸ã§ã¯ãå
ã®æå®ããããã¼ã«é¢é£ä»ããããå¤ã§ãããã¼ãè¦ã¤ãããªãã£ãå ´åã¯ãundefined ãè¿ããã¾ãã
解説
getOrInsert() ã¡ã½ããã¯ã次ã®ãã®ã¨åçã§ãã
if (map.has(key)) {
return map.get(key);
}
map.set(key, defaultValue);
return defaultValue;
åæã«ã以ä¸ã®ãã¿ã¼ã³ã¨ãä¼¼ã¦ãã¾ãï¼ãã ãã対å¿è¡¨å
ã§ null ã undefined ãæå¹ãªå¤ã§ããå ´åãä¿¡é ¼æ§ã¯è¥å¹²ä½ä¸ãã¾ãï¼ã
map.set(key, map.get(key) ?? defaultValue);
ä¾
>é åã®å¯¾å¿è¡¨
ããããã®ãã¼ãå¤ã®é
åã«å²ãå½ã¦ããã¦ãã対å¿è¡¨ã§ã¯ãgetOrInsert() ã使ç¨ãããã¨ã§ãæ°ããå¤ãé
åã«è¿½å ãããã¨ããåã«ããã®ãã¼ã«å¯¾å¿ããé
åãåå¨ãããã¨ã確èªã§ãã¾ãã
map.getOrInsert(key, []).push(value);
ããã©ã«ãå¤ã®é©ç¨
getOrInsert() ã使ç¨ãããã¨ã§ããã®å¤ãç¾å¨å¿
è¦ãªãå ´åã§ãããã¼ã対å¿è¡¨ã«åå¨ãããã¨ãä¿è¨¼ã§ãã¾ããããã¯é常ãã¦ã¼ã¶ã¼å
¥åã®æ£è¦åãè¡ãããã«è¡ããã¾ãã
ã¦ã¼ã¶ã¼ã®è¨å®æ å ±ãã¾ã¨ãã対å¿è¡¨ãããã¨ãã¾ããã¦ã¼ã¶ã¼ãç¹å®ã®ç°å¢è¨å®ãæå®ãã¦ããªãå ´åããã®ç°å¢è¨å®ã常ã«ããã©ã«ãå¤ã«ãªãããã«ãããã¨æãã¾ãã
const options = readConfig();
options.getOrInsert("theme", "light");
options.getOrInsert("fontSize", 14);
// ã³ã¼ãã®å¾åã§ã¯ããããã®ãªãã·ã§ã³ãåå¨ããã¨å®å¿ãã¦ä»®å®ã§ãã¾ã
document.body.dataset.theme = options.get("theme");
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-map.prototype.getorinsert > |