Baseline 2025
Newly available
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
Iterator
å®ä¾ç flatMap()
æ¹æ³è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³ï¼è¯¥è¿ä»£å¨è¾
婿¹æ³å°åå§è¿ä»£å¨ä¸çæ¯ä¸ªå
ç´ æ å°å°ä¸ä¸ªå½æ°ä¸ï¼å¹¶çæç±æ å°å½æ°è¿åçå
ç´ ï¼è¿äºå
ç´ å
å«å¨å¦ä¸ä¸ªè¿ä»£å¨æå¯è¿ä»£å¯¹è±¡ä¸ï¼ã
callbackFn
为è¿ä»£å¨äº§ççæ¯ä¸ªå
ç´ æ§è¡ç彿°ãå
¶åºè¯¥è¿åä¸ä¸ªè¿ä»£å¨æå¯è¿ä»£å¯¹è±¡ï¼è¯¥å¯¹è±¡çæçå
ç´ å°è¢« flatMap()
æäº§çï¼æè
å个éè¿ä»£å¨/å¯è¿ä»£å¯¹è±¡å¼ï¼è¯¥å¼å°è¢« flatMap()
æäº§çãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å
¥ä»¥ä¸åæ°ï¼
element
å½åæ£å¨å¤ççå ç´ ã
index
å½åæ£å¨å¤ççå ç´ çç´¢å¼ã
ä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³ãå½è¯¥è¿ä»£å¨è¾
婿¹æ³ç next()
æ¹æ³ç¬¬ä¸æ¬¡è¢«è°ç¨æ¶ï¼è¯¥è¾
婿¹æ³ä¼å¨åºå±è¿ä»£å¨äº§çç第ä¸ä¸ªå
ç´ è°ç¨ callbackFn
ï¼å
¶è¿åå¼åºè¯¥æ¯ä¸ä¸ªè¿ä»£å¨æå¯è¿ä»£å¯¹è±¡ï¼å¹¶å°è¢«è¿ä»£å¨è¾
婿¹æ³é个产çï¼ç±»ä¼¼ yield*
ï¼ãå½ callbackFn
è¿åçä¸ä¸ä¸ªå
ç´ å®ææ¶ï¼å°ä»åºå±è¿ä»£å¨ä¸è·åä¸ä¸ä¸ªå
ç´ ãå½åºå±è¿ä»£å¨å®ææ¶ï¼è¿ä»£å¨è¾
婿¹æ³ä¹å®æï¼next()
æ¹æ³äº§ç { value: undefined, done: true }
ï¼ã
TypeError
妿 callbackFn
è¿åä¸ä¸ªéè¿ä»£å¨/å¯è¿ä»£å¯¹è±¡å¼æå符串åå§å¼ï¼åæåºè¯¥å¼å¸¸ã
flatMap
æ¥å callbackFn
两ç§ç±»åçè¿åå¼ï¼è¿ä»£å¨æå¯è¿ä»£å¯¹è±¡ãå®ä»¬ä¸ Iterator.from()
å¤çæ¹å¼ç¸åï¼å¦æè¿å弿¯å¯è¿ä»£çï¼åè°ç¨ [Symbol.iterator]()
æ¹æ³ï¼å¹¶ä½¿ç¨å
¶è¿åå¼ï¼å¦åï¼å°è¿åå¼è§ä¸ºä¸ä¸ªè¿ä»£å¨ï¼å¹¶è°ç¨å
¶ next()
æ¹æ³ã
[1, 2, 3]
.values()
.flatMap((x) => {
let itDone = false;
const it = {
next() {
if (itDone) {
return { value: undefined, done: true };
}
itDone = true;
return { value: x, done: false };
},
};
switch (x) {
case 1:
// 䏿¯è¿ä»£å¨çå¯è¿ä»£å¯¹è±¡
return { [Symbol.iterator]: () => it };
case 2:
// 䏿¯å¯è¿ä»£å¯¹è±¡çè¿ä»£å¨
return it;
case 3:
// å¯è¿ä»£çè¿ä»£å¨è§ä¸ºå¯è¿ä»£å¯¹è±¡
return {
...it,
[Symbol.iterator]() {
console.log("[Symbol.iterator]() 被è°ç¨äº");
return it;
},
};
}
})
.toArray();
// è¾åºâ[Symbol.iterator]() 被è°ç¨äºâ
// è¿å [1, 2, 3]
ç¤ºä¾ åå¹¶ map
以ä¸ç¤ºä¾å°ä¸¤ä¸ª Map
对象å并为ä¸ä¸ªï¼
const map1 = new Map([
["a", 1],
["b", 2],
["c", 3],
]);
const map2 = new Map([
["d", 4],
["e", 5],
["f", 6],
]);
const merged = new Map([map1, map2].values().flatMap((x) => x));
console.log(merged.get("a")); // 1
console.log(merged.get("e")); // 5
è¿é¿å
äºå建 map å
容çä¸´æ¶æ·è´ã请注æï¼å¿
é¡»å
å°æ°ç» [map1, map2]
转æ¢ä¸ºè¿ä»£å¨ï¼éè¿ Array.prototype.values()
ï¼ï¼å 为 Array.prototype.flatMap()
åªè½å±å¼æ°ç»ï¼è䏿¯å¯è¿ä»£å¯¹è±¡ã
new Map([map1, map2].flatMap((x) => x)); // Map(1) {undefined => undefined}
è¿åå符串
è½ç¶å符串æ¯å¯è¿ä»£å¯¹è±¡ï¼ä½ flatMap()
æç¡®æç»ä» callbackFn
è¿åçå符串åå§å¼ï¼å 为æç ä½è¿ä»£çè¡ä¸ºé叏䏿¯ä½ æ³è¦çã
[1, 2, 3]
.values()
.flatMap((x) => String(x))
.toArray(); // TypeError: Iterator.prototype.flatMap called on non-object
ä½ å¯ä»¥æ³è¦å°å ¶å è£ å¨æ°ç»ä¸ï¼ä»¥ä¾¿æ´ä¸ªå符串ä½ä¸ºä¸ä¸ªå¼è¢«çæã
[1, 2, 3]
.values()
.flatMap((x) => [String(x)])
.toArray(); // ['1', '2', '3']
æè
ï¼å¦æä½ æ³è¦æç ä½è¿ä»£ï¼ä½ å¯ä»¥ä½¿ç¨ Iterator.from()
å°å
¶è½¬æ¢ä¸ºä¸ä¸ªåéçè¿ä»£å¨ï¼
[1, 2, 3]
.values()
.flatMap((x) => Iterator.from(String(x * 10)))
.toArray();
// ['1', '0', '2', '0', '3', '0']
è§è æµè§å¨å
¼å®¹æ§ åè§
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