Baseline Widely available *
Iterator
对象æ¯ä¸ä¸ªç¬¦åè¿ä»£å¨åè®®ç对象ï¼å
¶æä¾äº next()
æ¹æ³ç¨ä»¥è¿åè¿ä»£å¨ç»æå¯¹è±¡ãææå
ç½®è¿ä»£å¨é½ç»§æ¿èª Iterator
ç±»ãIterator
ç±»æä¾äº [Symbol.iterator]()
æ¹æ³ï¼è¯¥æ¹æ³è¿åè¿ä»£å¨å¯¹è±¡æ¬èº«ï¼ä½¿è¿ä»£å¨ä¹å¯è¿ä»£ãå®è¿æä¾äºä¸äºä½¿ç¨è¿ä»£å¨çè¾
婿¹æ³ã
以ä¸é½æ¯å ç½®ç JavaScript è¿ä»£å¨ï¼
Array.prototype.values()
ãArray.prototype.keys()
ãArray.prototype.entries()
ãArray.prototype[Symbol.iterator]()
ãTypedArray.prototype.values()
ãTypedArray.prototype.keys()
ãTypedArray.prototype.entries()
ãTypedArray.prototype[Symbol.iterator]()
å arguments[Symbol.iterator]()
ãString.prototype[Symbol.iterator]()
ãMap.prototype.values()
ãMap.prototype.keys()
ãMap.prototype.entries()
å Map.prototype[Symbol.iterator]()
ãSet.prototype.values()
ãSet.prototype.keys()
ãSet.prototype.entries()
å Set.prototype[Symbol.iterator]()
ãRegExp.prototype[Symbol.matchAll]()
å String.prototype.matchAll()
ãGenerator
对象ï¼è¿åèªçæå¨å½æ°ãIntl.Segmenter.prototype.segment()
è¿åç Segments
对象ç [Symbol.iterator]()
æ¹æ³ãIterator.prototype.filter()
å Iterator.prototype.map()
ãæ¯ä¸ªè¿ä»£å¨é½æä¸ä¸ªä¸åçåå对象ï¼å®å®ä¹äºç¹å®è¿ä»£å¨ä½¿ç¨ç next()
æ¹æ³ãä¾å¦ï¼ææå符串è¿ä»£å¨å¯¹è±¡é½ç»§æ¿èªéè对象 StringIteratorPrototype
ï¼è¯¥å¯¹è±¡å
·ææç ä½è¿ä»£å½åå符串ç next()
æ¹æ³ãStringIteratorPrototype
è¿æä¸ä¸ª [Symbol.toStringTag]
屿§ï¼å
¶åå§å¼ä¸ºå符串 "String Iterator"
ãè¯¥å±æ§å¨ Object.prototype.toString()
ä¸ä½¿ç¨ã类似å°ï¼å
¶ä»è¿ä»£å¨åå乿èªå·±ç [Symbol.toStringTag]
å¼ï¼è¿äºå¼ä¸ä¸é¢ç»åºçåç§°ç¸åã
ææè¿äºåå对象é½ç»§æ¿èª Iterator.prototype
ï¼å®æä¾äºä¸ä¸ªè¿åè¿ä»£å¨å¯¹è±¡æ¬èº«ç [Symbol.iterator]()
æ¹æ³ï¼è¿ä½¿è¿ä»£å¨ä¹åå¾å¯è¿ä»£ã
夿³¨ï¼ è¿äºæ¹æ³æ¯è¿ä»£å¨è¾
婿¹æ³ï¼è䏿¯å¯è¿ä»£å¯¹è±¡è¾
婿¹æ³ï¼å 为å¯è¿ä»£å¯¹è±¡çå¯ä¸è¦æ±å°±æ¯å
·æ [Symbol.iterator]()
æ¹æ³ï¼å æ¤å®ä»¬æ²¡æå
±äº«çå忥å®è£
è¿äºæ¹æ³ã
Iterator
ç±»æ¬èº«æä¾äºä¸äºä½¿ç¨è¿ä»£å¨çè¾
婿¹æ³ãä¾å¦ï¼ä½ å¯è½æ³å以ä¸äºæ
ï¼
const nameToDeposit = new Map([
["Anne", 1000],
["Bert", 1500],
["Carl", 2000],
]);
const totalDeposit = [...nameToDeposit.values()].reduce((a, b) => a + b);
è¿é¦å
å° Map.prototype.values()
è¿åçè¿ä»£å¨å¨è½¬æ¢ä¸ºæ°ç»ï¼ç¶åä½¿ç¨ Array.prototype.reduce()
æ¹æ³è®¡ç®æ»åãç¶èï¼è¿æ¢å建äºä¸ä¸ªä¸é´æ°ç»ï¼åéå¤äºæ°ç»ä¸¤æ¬¡ãç¸åï¼ä½ å¯ä»¥ä½¿ç¨è¿ä»£å¨æ¬èº«ç reduce()
æ¹æ³ï¼
const totalDeposit = nameToDeposit.values().reduce((a, b) => a + b);
è¿ç§æ¹æ³æ´å 髿ï¼å 为å®åªè¿ä»£è¿ä»£å¨ä¸æ¬¡ï¼èä¸éè¦ä¿åä»»ä½ä¸é´å¼ãè¿ä»£å¨è¾ 婿¹æ³å¯¹äºä½¿ç¨æ éè¿ä»£å¨æ¯å¿ éçï¼
function* fibonacci() {
let current = 1;
let next = 1;
while (true) {
yield current;
[current, next] = [next, current + next];
}
}
const seq = fibonacci();
const firstThreeDigitTerm = seq.find((n) => n >= 100);
ä½ æ æ³å° seq
转æ¢ä¸ºæ°ç»ï¼å ä¸ºå®æ¯æ ç©·çãç¸åï¼ä½ å¯ä»¥ä½¿ç¨è¿ä»£å¨æ¬èº«ç find()
æ¹æ³ï¼è¯¥æ¹æ³ä»
éè¦è¿ä»£ seq
æ¥æ¾æ»¡è¶³æ¡ä»¶ç第ä¸ä¸ªå¼ã
ä½ ä¼åç°è®¸å¤è¿ä»£å¨æ¹æ³ç±»ä¼¼äºæ°ç»æ¹æ³ï¼ä¾å¦ï¼
Iterator.prototype.drop()
å Iterator.prototype.take()
ç»åèµ·æ¥æç¹ç±»ä¼¼äº Array.prototype.slice()
ã
å¨è¿äºæ¹æ³ä¸ï¼filter()
ãflatMap()
ãmap()
ãdrop()
å take()
è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³å¯¹è±¡ãè¿ä»£å¨è¾
婿¹æ³ä¹æ¯ä¸ä¸ª Iterator
å®ä¾ï¼ä½¿è¾
婿¹æ³å¯é¾å¼è°ç¨ãææè¿ä»£å¨è¾
婿¹æ³å¯¹è±¡é½ç»§æ¿äºä¸ä¸ªéç¨çåå对象ï¼è¯¥å¯¹è±¡å®ç°äºè¿ä»£å¨åè®®ï¼
next()
è°ç¨åºå±è¿ä»£å¨ç next()
æ¹æ³ï¼å°è¾
婿¹æ³åºç¨äºç»æï¼å¹¶è¿åç»æã
return()
è°ç¨åºå±è¿ä»£å¨ç return()
æ¹æ³ï¼å¹¶è¿åç»æã
è¿ä»£å¨è¾ 婿¹æ³ä¸åºå±è¿ä»£å¨å ±äº«ç¸åçæ°æ®æºï¼å æ¤è¿ä»£è¿ä»£å¨è¾ 婿¹æ³ä¼å¯¼è´åºå±è¿ä»£å¨ä¹è¢«è¿ä»£ã没æåæ³âå¤å»âè¿ä»£å¨ä»¥å 许å®è¢«å¤æ¬¡è¿ä»£ã
const it = [1, 2, 3].values();
const it2 = it.drop(0); // æ¬è´¨ä¸æ¯ä¸ä¸ªå¯æ¬
console.log(it.next().value); // 1
console.log(it2.next().value); // 2
console.log(it.next().value); // 3
æ°å½çè¿ä»£å¨
æä¸¤ç§âè¿ä»£å¨âï¼ç¬¦åè¿ä»£å¨åè®®ï¼å¿
éä¸åªéå
·æ next()
æ¹æ³ï¼ç对象ï¼ä»¥åç»§æ¿èª Iterator
ç±»ç对象ï¼åè
å¯ä»¥ä½¿ç¨è¾
婿¹æ³ã两è
äºä¸å
å«ââç»§æ¿èª Iterator
ç对象ä¸ä¼èªå¨åæè¿ä»£å¨ï¼å 为 Iterator
类并æªå®ä¹ next()
æ¹æ³ãç¸åï¼è¿äºå¯¹è±¡éè¦èªå·±å®ä¹ next()
æ¹æ³ãæ°å½çè¿ä»£å¨æçæ¯å³ç¬¦åè¿ä»£å¨åè®®ï¼åæ¶åç»§æ¿èª Iterator
çè¿ä»£å¨ã大夿°ä»£ç æææçè¿ä»£å¨é½æ¯æ°å½çè¿ä»£å¨å¹¶å¯ä»¥éè¿è¿ä»£è¿åæ°å½çè¿ä»£å¨ãè¦å建æ°å½çè¿ä»£å¨ï¼å¯ä»¥å®ä¹ä¸ä¸ªç»§æ¿ Iterator
çç±»ï¼æä½¿ç¨ Iterator.from()
æ¹æ³ã
class MyIterator extends Iterator {
next() {
// â¦
}
}
const myIterator = Iterator.from({
next() {
// â¦
},
});
æé 彿°
Iterator()
å®éªæ§
Iterator.from()
å®éªæ§
ä»ä¸ä¸ªè¿ä»£å¨æå¯è¿ä»£å¯¹è±¡å建ä¸ä¸ªæ°ç Iterator
对象ã
è¿äºå±æ§å®ä¹äº Iterator.prototype
å¹¶ç±ææ Iterator
å®ä¾æå
±äº«ã
Iterator.prototype.constructor
å建å®ä¾å¯¹è±¡çæé 彿°ãå¯¹äº Iterator
å®ä¾ï¼å
¶åå§å¼æ¯ Iterator
æé 彿°ã
Iterator.prototype[Symbol.toStringTag]
[Symbol.toStringTag]
屿§çåå§å¼æ¯å符串 "Iterator"
ãè¯¥å±æ§å¨ Object.prototype.toString()
ä¸ä½¿ç¨ã
夿³¨ï¼ ä¸å¤§å¤æ°å
置类ç [Symbol.toStringTag]
ä¸åï¼åºäº web å
¼å®¹æ§åå ï¼Iterator.prototype[Symbol.toStringTag]
æ¯å¯åçã
Iterator.prototype.drop()
å®éªæ§
è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾ 婿¹æ³ï¼å ¶ä¼è·³è¿å½åè¿ä»£å¨å¼å¤´ç»å®æ°éçå ç´ ã
Iterator.prototype.every()
å®éªæ§
æµè¯æ¯å¦ææç±è¿ä»£å¨äº§ççå ç´ é½è½éè¿ç±æä¾ç彿°å®ç°çæµè¯ã
Iterator.prototype.filter()
å®éªæ§
è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾
婿¹æ³ï¼å
¶åªäº§çè¿ä»£å¨ä¸ä»¤æä¾çåè°å½æ°è¿å true
çé£äºå
ç´ ã
Iterator.prototype.find()
å®éªæ§
è¿åè¿ä»£å¨äº§çç第ä¸ä¸ªæ»¡è¶³æä¾çæµè¯å½æ°çå
ç´ ãå¦ææ²¡ææ»¡è¶³æµè¯å½æ°çå¼ï¼åè¿å undefined
ã
Iterator.prototype.flatMap()
å®éªæ§
è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾ 婿¹æ³ï¼å ¶è·ååå§è¿ä»£å¨ä¸çæ¯ä¸ªå ç´ ï¼éè¿æ å°å½æ°è¿è¡æ å°ï¼å¹¶äº§çæ å°å½æ°è¿åçå ç´ ï¼å å«å¨å¦ä¸ä¸ªè¿ä»£å¨æå¯è¿ä»£å¯¹è±¡ï¼ã
Iterator.prototype.forEach()
å®éªæ§
为è¿ä»£å¨çæçæ¯ä¸ªå ç´ æ§è¡ä¸æ¬¡æä¾ç彿°ã
Iterator.prototype.map()
å®éªæ§
è¿åä¸ä¸ªæ°çè¿ä»£å¨è¾ 婿¹æ³ï¼å ¶çæçå ç´ é½ç±æ å°å½æ°è¿è¡è½¬æ¢èæ¥ã
Iterator.prototype.reduce()
å®éªæ§
对è¿ä»£å¨çæçæ¯ä¸ªå ç´ æ§è¡ç¨æ·æä¾çâreducerâåè°å½æ°ï¼ä¼ å ¥åä¸ä¸ªå ç´ è®¡ç®çè¿åå¼ã卿æå ç´ ä¸è¿è¡ reducer çæç»ç»ææ¯å个å¼ã
Iterator.prototype.some()
å®éªæ§
æµè¯è¿ä»£å¨ä¸æ¯å¦è³å°æä¸ä¸ªè½å¤çå ç´ éè¿ç±æä¾ç彿°å®ç°çæµè¯ãè¿åä¸ä¸ªå¸å°å¼ã
Iterator.prototype.take()
å®éªæ§
è¿åä¸ä¸ªæ°çè¿ä»£å¨å¸®å©æ¹æ³ï¼å®çæå½åè¿ä»£å¨ä¸ç»å®æ°éçå ç´ ï¼ç¶åç»æã
Iterator.prototype.toArray()
å®éªæ§
å建ä¸ä¸ªç¨è¿ä»£å¨äº§ççå
ç´ å¡«å
çæ°ç Array
å®ä¾ã
Iterator.prototype[Symbol.iterator]()
è¿åè¿ä»£å¨å¯¹è±¡æ¬èº«ãè¿ä½¿è¿ä»£å¨å¯¹è±¡ä¹æ¯å¯è¿ä»£çã
ææå
ç½®è¿ä»£å¨é½æ¯å¯è¿ä»£çï¼å æ¤ä½ å¯ä»¥å¨ for...of
循ç¯ä¸ä½¿ç¨å®ä»¬ï¼
const arrIterator = [1, 2, 3].values();
for (const value of arrIterator) {
console.log(value);
}
// æå°ï¼1, 2, 3
è§è æµè§å¨å
¼å®¹æ§ åè§
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