Baseline Widely available
flatMap()
æ¹æ³å¯¹æ°ç»ä¸çæ¯ä¸ªå
ç´ åºç¨ç»å®çåè°å½æ°ï¼ç¶åå°ç»æå±å¼ä¸çº§ï¼è¿åä¸ä¸ªæ°æ°ç»ãå®çä»·äºå¨è°ç¨ map()
æ¹æ³ååè°ç¨æ·±åº¦ä¸º 1 ç flat()
æ¹æ³ï¼arr.map(...args).flat()
ï¼ï¼ä½æ¯åå«è°ç¨è¿ä¸¤ä¸ªæ¹æ³ç¨å¾®æ´é«æä¸äºã
const arr1 = [1, 2, 1];
const result = arr1.flatMap((num) => (num === 2 ? [2, 2] : 1));
console.log(result);
// Expected output: Array [1, 2, 2, 1]
è¯æ³
flatMap(callbackFn)
flatMap(callbackFn, thisArg)
åæ°
callbackFn
ä¸ä¸ªå¨æ°ç»çæ¯ä¸ªå ç´ ä¸æ§è¡ç彿°ãå®åºè¯¥è¿åä¸ä¸ªå 嫿°æ°ç»å ç´ çæ°ç»ï¼ææ¯è¦æ·»å å°æ°æ°ç»ä¸çåä¸ªéæ°ç»å¼ãè¯¥å½æ°å°è¢«ä¼ å ¥ä»¥ä¸åæ°ï¼
element
æ°ç»ä¸æ£å¨å¤ççå½åå ç´ ã
index
æ°ç»ä¸æ£å¨å¤ççå½åå ç´ çç´¢å¼ã
array
è°ç¨ flatMap()
çå½åæ°ç»ã
thisArg
å¯é
卿§è¡ callbackFn
æ¶ç¨ä½ this
çå¼ãåè§è¿ä»£æ¹æ³ã
ä¸ä¸ªæ°çæ°ç»ï¼å ¶ä¸æ¯ä¸ªå ç´ é½æ¯åè°å½æ°çç»æï¼å¹¶ä¸è¢«å±å¼ä¸çº§ã
æè¿°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]);
// çä»·äº
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 arr1 = [1, 2, 3, 4];
arr1.map((x) => [x * 2]);
// [[2], [4], [6], [8]]
arr1.flatMap((x) => [x * 2]);
// [2, 4, 6, 8]
// åªæä¸å±è¢«å±å¹³
arr1.flatMap((x) => [[x * 2]]);
// [[2], [4], [6], [8]]
è½ç¶ä¸é¢ç示ä¾å¯ä»¥éè¿ä½¿ç¨ map()
æ¹æ³èªè¡å®ç°ï¼ä½ä¸é¢çç¤ºä¾æ´å¥½å°å±ç¤ºäº flatMap()
æ¹æ³çç¨æ³ã
让æä»¬ä»ä¸ç»å¥åä¸çæåè¯å表ã
const arr1 = ["it's Sunny in", "", "California"];
arr1.map((x) => x.split(" "));
// [["it's","Sunny","in"],[""],["California"]]
arr1.flatMap((x) => x.split(" "));
// ["it's","Sunny","in", "", "California"]
请注æï¼è¾åºå表é¿åº¦å¯è½ä¸è¾å ¥å表é¿åº¦ä¸åã
å¨map()
æ¹æ³è¿ç¨ä¸æ·»å åå é¤å
ç´
flatMap
æ¹æ³å¯ä»¥ç¨ä½å¨ map
æ¹æ³ä¸æ·»å åå é¤å
ç´ ï¼ä¿®æ¹å
ç´ æ°éï¼çæ¹æ³ãæ¢å¥è¯è¯´ï¼å®å
è®¸ä½ å°ä¸äºé¡¹å¤ç为å¦ä¸äºé¡¹ï¼éè¿åç¬å¤çæ¯ä¸ªè¾å
¥é¡¹ï¼ï¼è䏿»æ¯ä¸å¯¹ä¸çãå¨è¿ä¸ªæä¹ä¸ï¼å®çä½ç¨ç±»ä¼¼äº filter çç¸åæä½ã妿è¦ä¿ç该项ï¼åè¿åä¸ä¸ªå
å«è¯¥é¡¹çåå
ç´ æ°ç»ï¼å¦æè¦æ·»å å
ç´ ï¼åè¿åä¸ä¸ªå
å«å¤ä¸ªå
ç´ çæ°ç»ï¼å¦æè¦å é¤è¯¥é¡¹ï¼åè¿åä¸ä¸ªç©ºæ°ç»ã
// å设æä»¬æ³è¦å 餿æè´æ°ï¼å¹¶å°å¥æ°æåæå¶æ°å 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]
å¨ç¨çæ°ç»ä¸ä½¿ç¨ flatMap()
callbackFn
ä¸ä¼è¢«æºæ°ç»ä¸ç空槽è°ç¨ï¼å 为 map()
ä¸ä¼è°ç¨ï¼è flat()
å°å¿½ç¥è¿åæ°ç»ä¸ç空槽ã
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
屿§ï¼ç¶åè®¿é®æ¯ä¸ªæ´æ°ç´¢å¼ã妿åè°å½æ°çè¿åå¼ä¸æ¯æ°ç»ï¼åå§ç»ç´æ¥å°å
¶éå å°ç»ææ°ç»çæ«å°¾ã
const arrayLike = {
length: 3,
0: 1,
1: 2,
2: 3,
};
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