Iterator.from()
Baseline
2025
æè¿å©ç¨å¯è½
March 2025以éããã®æ©è½ã¯ææ°ã®ãã¼ã¸ã§ã³ã®ç«¯æ«ããã³ãã©ã¦ã¶ã¼ã§åä½ãã¾ããå¤ã端æ«ããã©ã¦ã¶ã¼ã§ã¯åä½ããªããã¨ãããã¾ãã
Iterator.from() ã¯éçã¡ã½ããã§ãã¤ãã¬ã¼ã¿ã¼ãå復å¯è½ãªãã¸ã§ã¯ãããæ°ãã Iterator ãªãã¸ã§ã¯ãã使ãã¾ãã
æ§æ
Iterator.from(object)
弿°
object-
å復å¯è½ãããã³ã«ã¾ãã¯ã¤ãã¬ã¼ã¿ã¼ãããã³ã«ãå®è£ ãããªãã¸ã§ã¯ãã§ãã
è¿å¤
object ãå復å¯è½ãªãã¸ã§ã¯ãã§ããå ´åããã®ãªãã¸ã§ã¯ãã® [Symbol.iterator]() ã¡ã½ãããå¼ã³åºãããã¤ãã¬ã¼ã¿ã¼ãåå¾ããã¾ãã ãã以å¤ã®å ´åã¯ã object ãã¤ãã¬ã¼ã¿ã¼ã§ããã¨è¦ãªããã¾ãã ã¤ãã¬ã¼ã¿ã¼ããã§ã« instanceof Iterator ã§ããå ´åï¼ã¤ã¾ãããã®ãããã¿ã¤ããã§ã¼ã³ã« Iterator.prototype ãããå ´åï¼ã¯ãç´æ¥è¿ããã¾ãã ãã以å¤ã®å ´åã¯ãå
ã®ã¤ãã¬ã¼ã¿ã¼ãã©ããããæ°ãã Iterator ãªãã¸ã§ã¯ãã使ããã¾ãã
解説
ãã®ã¡ã½ããã¯ãããããã©ã¤ãã©ãªã¼ããã¨ã¯ã¹ãã¼ããããç¬èªã®ã¤ãã¬ã¼ã¿ã¼ãæ£è¦ã¤ãã¬ã¼ã¿ã¼ã«å¤æããããã«åå¨ãã¾ãã Iterator.from() ãè¿ãã¤ãã¬ã¼ã¿ã¼ãªãã¸ã§ã¯ãã¯ãã¹ã¦ãå
±éã®ãããã¿ã¤ããªãã¸ã§ã¯ããç¶æ¿ãã¦ããããã®ãããã¿ã¤ãã«ã¯æ¬¡ã®ã¡ã½ãããåãã£ã¦ãã¾ãã
next()-
åºç¤ã¨ãªãã¤ãã¬ã¼ã¿ã¼ã®
next()ã¡ã½ãããå¼ã³åºããçµæãè¿ãã¾ãã return()-
åºç¤ã¨ãªãã¤ãã¬ã¼ã¿ã¼ã®
return()ã¡ã½ãããå¼ã³åºãããã®çµæãè¿ãã¾ããã¾ãã¯ãåºç¤ã¨ãªãã¤ãã¬ã¼ã¿ã¼ã«return()ã¡ã½ããããªããã°ã{ value: undefined, done: true }ãè¿ãã¾ãã
ä¾
>å復å¯è½ãªãã¸ã§ã¯ããæ£è¦ã¤ãã¬ã¼ã¿ã¼ã«å¤æ
ãã§ã« obj ã¯å復å¯è½ãªãã¸ã§ã¯ãã§ããããã® [Symbol.iterator]() ã¡ã½ãããå¼ã³åºãããã¨æ£è¦ã¤ãã¬ã¼ã¿ã¼ãè¿ããããIterator.from(obj) ã¯åãã¤ãã¬ã¼ã¿ã¼ãè¿ãã¾ãã
const iterator = (function* () {
yield 1;
yield 2;
yield 3;
})();
const obj = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj);
console.log(iterator2 === iterator); // true
obj2 ã¯å復å¯è½ãªãã¸ã§ã¯ãã§ããããã® [Symbol.iterator]() ã¡ã½ãããå¼ã°ããã¨ãæ£è¦ã®ã¤ãã¬ã¼ã¿ã¼ã§ã¯ãªããã®ãè¿ããããIterator.from(obj2) ã¯å
ã®ã¤ãã¬ã¼ã¿ã¼ãã©ããããæ°ããã¤ãã¬ã¼ã¿ã¼ãè¿ãã¾ãã
const iterator = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const obj2 = {
[Symbol.iterator]() {
return iterator;
},
};
const iterator2 = Iterator.from(obj2);
console.log(iterator2 === iterator); // false
console.log(iterator2.next()); // { value: 0, done: false }
console.log(iterator.next()); // { value: 1, done: false }
ã¤ãã¬ã¼ã¿ã¼ãæ£è¦ã¤ãã¬ã¼ã¿ã¼ã«å¤æ
obj ã¯ãã§ã«æ£è¦ã¤ãã¬ã¼ã¿ã¼ã§ãããããIterator.from(obj) ã¯èªåèªèº«ãè¿ãã¾ãã
const obj = (function* () {
yield 1;
yield 2;
yield 3;
})();
const iterator = Iterator.from(obj);
console.log(iterator === obj); // true
obj2 ã¯éæ£è¦ã¤ãã¬ã¼ã¿ã¼ã§ãããããIterator.from(obj2) ã¯å
ã®ã¤ãã¬ã¼ã¿ã¼ãã©ããããæ°ããã¤ãã¬ã¼ã¿ã¼ãè¿ãã¾ãã
const obj2 = {
current: 0,
next() {
return { value: this.current++, done: false };
},
};
const iterator = Iterator.from(obj2);
console.log(iterator === obj2); // false
console.log(iterator.next()); // { value: 0, done: false }
console.log(obj2.next()); // { value: 1, done: false }
仿§æ¸
| 仿§æ¸ |
|---|
| ECMAScript® 2027 Language Specification > # sec-iterator.from > |