728x90
이터러블
이터레이터를 리턴하는 [Symbol.iterator]()를 가지는 값
이터레이터
{value, done} 객체를 리턴하는 next()를 가지는 값
const arr = [1, 2, 3]
let iter = arr[Symbol.iterator]()
iter.next() // {value: 1, done: false}
iter.next() // {value: 2, done: false}
iter.next() // {value: 3, done: false}
iter.next() // {value: undefined, done: true}
이터러블/이터레이터 프로토콜
이터러블을 for ... of, 전개연산자 등과 함께 동작하도록 한 규약
const arr = [1, 2, 3, 4, 5]
for(const a of arr) console.log(a) // 1 2 3 4 5
arr[Symbol.iterator] = null
for(const a of arr) console.log(a) // Uncaught TypeError: arr is not iterable
// Map, Set 모두 결과 동일함
사용자 정의 이터러블
const iterable = {
[Symbol.iterator]() {
let i = 3
return {
next() {
return i == 0 ? {done: true} : {value: i--, done: false}
},
[Symbol.iterator]() {
return this
}
}
}
}
let iter = iterable[Symbol.iterator]()
iter.next() // {value: 3, done: false}
iter.next() // {value: 2, done: false}
iter.next() // {value: 1, done: false}
iter.next() // {done: true}
728x90
'함수형프로그래밍 with ' 카테고리의 다른 글
제너레이터와 이터레이터 (0) | 2021.03.24 |
---|---|
고차함수 (0) | 2021.03.24 |
댓글