Iterator.prototype.map()
åºçº¿
2025
æè¿å¯ç¨
èª March 2025 èµ·ï¼æ¤ç¹æ§å·²å¨ææ°æµè§å¨ä¸å¾å°æ¯æãä½å¨è¾æ§çè®¾å¤ææµè§å¨ä¸å¯è½æ æ³è¿è¡ã
å®éªæ§: è¿æ¯ä¸é¡¹å®éªæ§ææ¯
å¨å°å
¶ç¨äºç产ä¹åï¼è¯·ä»ç»æ£æ¥æµè§å¨å
¼å®¹æ§è¡¨æ ¼ã
Iterator å®ä¾ç map() æ¹æ³è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³ï¼è¯¥æ¹æ³çæç±æ å°å½æ°è½¬æ¢åçè¿ä»£å¨çå
ç´ ã
è¯æ³
map(callbackFn)
åæ°
callbackFn-
为è¿ä»£å¨ä¸çæ¯ä¸ªå ç´ æ§è¡ç彿°ãå ¶è¿åå¼å°ç±è¿ä»£å¨è¾ 婿¹æ³çæãè¯¥å½æ°è¢«è°ç¨æ¶å°ä¼ å ¥ä»¥ä¸åæ°ï¼
è¿åå¼
ä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³ãæ¯å½è¿ä»£å¨è¾
婿¹æ³ç next() æ¹æ³è¢«è°ç¨æ¶ï¼å®ä»åºå±è¿ä»£å¨ä¸è·åä¸ä¸ä¸ªå
ç´ ï¼è°ç¨ callbackFnï¼å¹¶äº§çè¿åå¼ãå½åºå±è¿ä»£å¨å®ææ¶ï¼è¿ä»£å¨è¾
婿¹æ³ä¹ä¼å®æï¼next() æ¹æ³äº§ç { value: undefined, done: true }ï¼ã
æè¿°
è¿ä»£å¨è¾
婿¹æ³ç¸å¯¹äºæ°ç»æ¹æ³ç主è¦ä¼å¿å¨äºå®ä»¬è½å¤å¤çæ éè¿ä»£å¨ãå¯¹äºæ éè¿ä»£å¨ï¼map() å
è®¸ä½ å建ä¸ä¸ªæ°çè¿ä»£å¨ï¼è¯¥è¿ä»£å¨å¨è¿ä»£æ¶äº§çç»è¿è½¬æ¢çå
ç´ ã
示ä¾
>ä½¿ç¨ map()
ä¸é¢ç示ä¾å建äºä¸ä¸ªçæææ³¢é£å¥æ°åä¸ç项çè¿ä»£å¨ï¼å¹¶å°å ¶è½¬æ¢ä¸ºæ¯ä¸ªé¡¹çå¹³æ¹çæ°è¿ä»£å¨ï¼ç¶å读ååå 个项ï¼
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci().map((x) => x ** 2);
console.log(seq.next().value); // 1
console.log(seq.next().value); // 1
console.log(seq.next().value); // 4
å¨ for...of 循ç¯ä¸ä½¿ç¨ map()
å½ä½ 䏿³æå¨è¿ä»£è¿ä»£å¨æ¶ï¼map() æ¯ææ¹ä¾¿çãå 为è¿ä»£å¨ä¹æ¯å¯è¿ä»£çï¼æä»¥ä½ å¯ä»¥ç¨ for...of å¾ªç¯æ¥è¿ä»£è¿åçè¾
婿¹æ³ï¼
for (const n of fibonacci().map((x) => x ** 2)) {
console.log(n);
if (n > 30) {
break;
}
}
// è¾åºï¼
// 1
// 1
// 4
// 9
// 25
// 64
çä»·äºï¼
for (const n of fibonacci()) {
const n2 = n ** 2;
console.log(n2);
if (n2 > 30) {
break;
}
}
è§è
| è§è |
|---|
| ECMAScript® 2027 Language Specification> # sec-iterator.prototype.map> |