iterator/iterable 및generator
iterator/iterable 및generator
iterator
넥스트 방법을 포함하는 대상,value와done를 포함하는 대상을 되돌려줍니다.
function makeIterator(array) {
var nextIndex = 0;
return {
next: function () {
return nextIndex < array.length ? {
value: array[nextIndex++],
done: false
} : {
done: true
};
}
};
}
var it = makeIterator(['yo', 'ya']);
console.log(it.next().value); // 'yo'
console.log(it.next().value); // 'ya'
console.log(it.next().done); // true
iterable
하나는 Symbol을 실현시켰다.iterator 속성의 대상입니다. 교체 가능한 대상이라고 합니다.
var myIterable = {};
myIterable[Symbol.iterator] = function* () {
yield 1;
yield 2;
yield 3;
};
for (let value of myIterable) {
console.log(value);
}
// 1
// 2
// 3
//or
console.log([...myIterable]); // [1, 2, 3]
generator
자신의 상태를 유지할 수 있는 교체기 공장 함수
function* idMaker() {
var index = 0;
while(true)
yield index++;
}
var gen = idMaker();
console.log(gen.next().value); // 0
console.log(gen.next().value); // 1
console.log(gen.next().value); // 2
다음 예를 참조하십시오.
let arr = [1, 2, 3];
/*
generator next
*/
function* gen(arr) {
for (let x of arr) {
yield x;
}
}
function makeIterator(arr) {
let nextIndex = 0;
return {
[Symbol.iterator]: function() {
return this;
},
next: function() {
return nextIndex < array.length ?
{value: array[nextIndex++], done: false} :
{value: undefined, done: true};
}
}
}
/*
Symbol.iterator, iterable
iterable ymbol.iterator
*/
let iterable = gen(arr);
console.log(iterable[Symbol.iterator]);
/*
*/
let iterator = iterable[Symbol.iterator]();
console.log(iterator === iterable);
let iterable2 = makeIterator(arr);
console.log(iterable2[Symbol.iterator]);
let iterator2 = iterable2[Symbol.iterator]();
console.log(iterator2 === iterable2);
/*
[Function: [Symbol.iterator]]
true
[Function: [Symbol.iterator]]
true
*/
즉,
gen이 생성한generator 대상은 iterable의 대상이자 iterator입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.