Baseline Widely available
flatMap()
㯠Array
ã¤ã³ã¹ã¿ã³ã¹ã®ã¡ã½ããã§ãæåã«ãããã³ã°é¢æ°ã使ç¨ãã¦ããããã®è¦ç´ ããããããå¾ãçµæãæ°ããé
åå
ã«å¹³å¦åãã¾ããããã¯ã map()
ã®å¾ã«æ·±ã 1 ã® flat()
ãè¡ãã®ã¨åãã§ãã (arr.map(...args).flat()
)ãããã 2 ã¤ã®ã¡ã½ãããå¥ã
ã«å¼ã³åºãããããããã«å¹ççã§ãã
const arr = [1, 2, 1];
const result = arr.flatMap((num) => (num === 2 ? [2, 2] : 1));
console.log(result);
// äºæ³ãããçµæ: Array [1, 2, 2, 1]
æ§æ
flatMap(callbackFn)
flatMap(callbackFn, thisArg)
弿°
callbackFn
é åã®ããããã®è¦ç´ ã«å¯¾ãã¦å®è¡ãã颿°ããã®é¢æ°ã¯ãæ°ããé åã®è¦ç´ ãæ ¼ç´ããé åãè¿ãããæ°ããé åã«è¿½å ãã 1 ã¤ã®é å以å¤ã®å¤ãè¿ãã¾ãããã®é¢æ°ã¯ã以ä¸ã®å¼æ°ã§å¼ã³åºããã¾ãã
element
é åã§ç¾å¨å¦çä¸ã®è¦ç´ ã§ãã
index
é åã§ç¾å¨å¦çä¸ã®è¦ç´ ã®ã¤ã³ããã¯ã¹ã§ãã
array
flatMap()
ãå¼ã³åºãããé
åã§ãã
thisArg
çç¥å¯
callbackFn
ãå®è¡ããã¨ãã« this
ã¨ãã¦ä½¿ç¨ããå¤ã§ããå復å¦çã¡ã½ãããåç
§ãã¦ãã ããã
åè¦ç´ ãã³ã¼ã«ããã¯é¢æ°ã®çµæã§ãããæ·±ãã 1 ã«å¹³å¦åãããæ°ããé åã§ãã
解説flatMap()
ã¡ã½ããã¯å復å¦çã¡ã½ããã§ããã³ã¼ã«ããã¯é¢æ°ã®è©³ç´°ãªèª¬æã¯ Array.prototype.map()
ãåç
§ãã¦ãã ãããflatMap()
ã¡ã½ããã¯ãmap(callbackFn, thisArg)
ã®å¾ã«ã® flat(1)
ãå¼ã³åºãã®ã¨åãã§ããè¦ç´ ãã¨ã«ãæ°ããè¦ç´ ã®é
åãçæããã§ããé
åãé£çµãã¦æ°ããé
åãå½¢æãã¾ãããããã®ã¡ã½ãããä¸è¬çã«ã©ã®ããã«åä½ããã®ãã«ã¤ãã¦ã®è©³ç´°ã¯ãå復å¦çã¡ã½ããã®ç¯ãã覧ãã ããã
flatMap()
ã¡ã½ããã¯æ±ç¨çã§ãããã㯠this
å¤ã« length
ããããã£ã¨æ´æ°ãã¼ã®ããããã£ããããã¨ã ããæå¾
ãã¾ãããã ãã callbackFn
ããè¿ãããå¤ã¯ãå¹³å¦åããå ´åã¯é
åã§ãªããã°ãªãã¾ããã
const arr = [1, 2, 3, 4];
arr.flatMap((x) => [x, x * 2]);
// is equivalent to
const n = arr.length;
const acc = new Array(n * 2);
for (let i = 0; i < n; i++) {
const x = arr[i];
acc[i * 2] = x;
acc[i * 2 + 1] = x * 2;
}
// [1, 2, 2, 4, 3, 6, 4, 8]
ãã®å ´åã flatMap
ã®ææ³ã¯ for ã«ã¼ãã®ææ³ãããé
ããã¨ã«æ³¨æãã¦ãã ãããããã¯ãã¬ãã¼ã¸ã³ã¬ã¯ã·ã§ã³ãå¿
è¦ãªä¸æçãªé
åãçæãããããã¨ãè¿ãããé
åã®ãµã¤ãºãé »ç¹ã«å¤æ´ããå¿
è¦ããªãããã§ããããããæè»æ§ã¨å¯èªæ§ãæ±ããããå ´åã«ã¯ã flatMap
ãæ£ãã解決çã¨ãªãå¯è½æ§ãããã¾ãã
const arr = [1, 2, 3, 4];
arr.map((x) => [x * 2]);
// [[2], [4], [6], [8]]
arr.flatMap((x) => [x * 2]);
// [2, 4, 6, 8]
// 1ã¤ã®ã¬ãã«ã ãããã©ããåããã
arr.flatMap((x) => [[x * 2]]);
// [[2], [4], [6], [8]]
ä¸è¨ã¯ map ã使ç¨ãããã¨ã§ãå®ç¾ã§ãã¾ãããããã§ã¯ flatMap()
ã®ä½¿ç¨æ¹æ³ããããã示ãä¾ãç´¹ä»ãã¾ãã
æç« ã®ãªã¹ãããåèªã®ãªã¹ããçæãã¦ã¿ã¾ãããã
const arr = ["it's Sunny in", "", "California"];
arr.map((x) => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
arr.flatMap((x) => x.split(" "));
// ["it's","Sunny","in", "", "California"]
åºåãªã¹ãã®é·ãã¯å ¥åãªã¹ãã®é·ãã¨ã¯ç°ãªãå ´åããããã¨ã«æ³¨æãã¦ãã ããã
map() ã®ã¢ã¤ãã ã®è¿½å ã¨åé¤flatMap
ã¯ãmap
ä¸ã«ã¢ã¤ãã ã®è¿½å ã¨åé¤ï¼ã¢ã¤ãã ã®æ°ã夿´ï¼ãè¡ãæ¹æ³ã¨ãã¦å©ç¨ã§ãã¾ãã ã¤ã¾ãã常ã«ä¸å¯¾ä¸ã§ã¯ãªããå¤ãã®ã¢ã¤ãã ãå¤ãã®ã¢ã¤ãã ã«ï¼å
¥åãããã¢ã¤ãã ãåå¥ã«æ±ããã¨ã§ï¼ãããã§ããããã«ãªãã¾ãã ãã®æå³ã§ã¯ã filter ã®éã®ãããªåãããã¾ãã åç´ã«ãã¢ã¤ãã ãä¿æããã«ã¯ 1 è¦ç´ ã®é
åãè¿ããã¢ã¤ãã ã追å ããã«ã¯è¤æ°è¦ç´ ã®é
åãè¿ããã¢ã¤ãã ãåé¤ããã«ã¯ 0 è¦ç´ ã®é
åãè¿ãã¾ãã
// ä¾ãã°ããã¹ã¦ã®è² ã®æ°ãåãé¤ãã
// 奿°ãå¶æ°ã¨ 1 ã«åå²ãããã¨ãã¾ãã
const a = [5, 4, -3, 20, 17, -33, -4, 18];
// |\ \ x | | \ x x |
// [4,1, 4, 20, 16, 1, 18]
const result = a.flatMap((n) => {
if (n < 0) {
return [];
}
return n % 2 === 0 ? [n] : [n - 1, 1];
});
console.log(result); // [4, 1, 4, 20, 16, 1, 18]
callbackFn ã®ç¬¬ 3 弿°ã®ä½¿ç¨
array
弿°ã¯ãé
åå
ã®å¥ã®è¦ç´ ã«ã¢ã¯ã»ã¹ãããå ´åãç¹ã«ããã®é
åãåç
§ããæ¢åã®å¤æ°ããªãå ´åã«ä¾¿å©ã§ããæ¬¡ã®ä¾ã§ã¯ãæåã« filter()
ã使ç¨ãã¦éç¨ã¹ãã¼ã·ã§ã³ãæ½åºããæ¬¡ã« flatMap()
ã使ç¨ãã¦ãããããã®è¦ç´ ãé§
ã¨ãã®æ¬¡ã®é§
ãå«ãæ°ããé
åã使ãã¦ãã¾ããæå¾ã®é§
ã§ã¯ãæçµçãªé
åãããã®é§
ãé¤å¤ããããã«ã空ã®é
åãè¿ãã¦ãã¾ãã
const stations = ["New Haven", "West Haven", "Milford (closed)", "Stratford"];
const line = stations
.filter((name) => !name.endsWith("(closed)"))
.flatMap((name, idx, arr) => {
// arr 弿°ããªãå ´åã夿°ã«ä¿åããã«ä¸éé
åã«ç°¡åã«
// ã¢ã¯ã»ã¹ããæ¹æ³ã¯ããã¾ããã
if (idx === arr.length - 1) return []; // æå®ãããé§
ã«æ¬¡ã®é§
ããªã
return [`${name} - ${arr[idx + 1]}`];
});
console.log(line); // ['New Haven - West Haven', 'West Haven - Stratford']
array
弿°ã¯ãæ§ç¯ä¸ã®é
åã§ã¯ããã¾ãããã³ã¼ã«ããã¯é¢æ°ããæ§ç¯ä¸ã®é
åã«ã¢ã¯ã»ã¹ããæ¹æ³ã¯ããã¾ããã
map()
ã¯å¼ã³åºãããã flat()
ã¯è¿ãé
åã®ç©ºã®ã¹ããããç¡è¦ããã®ã§ã callbackFn
ã¯å
ã®é
åã®ç©ºã®ã¹ãããã«å¯¾ãã¦ã¯å¼ã³åºããã¾ããã
console.log([1, 2, , 4, 5].flatMap((x) => [x, x * 2])); // [1, 2, 2, 4, 4, 8, 5, 10]
console.log([1, 2, 3, 4].flatMap((x) => [, x * 2])); // [2, 4, 6, 8]
é
å以å¤ã®ãªãã¸ã§ã¯ãã«å¯¾ãã flatMap() ã®å¼ã³åºã
flatMap()
ã¡ã½ãã㯠this
ã® length
ããããã£ãèªã¿è¾¼ã¿ã次ã«ãã¼ã length
ããå°ããéè² ã®æ´æ°ã§ããåããããã£ã«ã¢ã¯ã»ã¹ãã¾ããã³ã¼ã«ããã¯é¢æ°ã®è¿ãå¤ãé
åã§ãªãå ´åã¯ã常ã«çµæã®é
åã«ç´æ¥è¿½å ããã¾ãã
const arrayLike = {
length: 3,
0: 1,
1: 2,
2: 3,
3: 4, // length ã 3 ã§ãããã flatMap() ããç¡è¦ããã
};
console.log(Array.prototype.flatMap.call(arrayLike, (x) => [x, x * 2]));
// [1, 2, 2, 4, 3, 6]
// ã³ã¼ã«ããã¯ããè¿ãããé
å風ã®ãªãã¸ã§ã¯ãã¯å¹³å¦åãããªã
console.log(
Array.prototype.flatMap.call(arrayLike, (x) => ({
length: 1,
0: x,
})),
);
// [ { '0': 1, length: 1 }, { '0': 2, length: 1 }, { '0': 3, length: 1 } ]
仿§æ¸ ãã©ã¦ã¶ã¼ã®äºææ§ é¢é£æ
å ±
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4