ES6 입문 Iterator 인터페이스 와 for. of
ES6 에 Set 과 Map 두 가지 데이터 구 조 를 새로 추 가 했 고 JS 기 존의 배열 과 대상 을 더 하면 네 가지 데이터 집합 이 생 겼 다. 평소에 이들 을 조합 해서 사용 하고 자신의 데이터 구 조 를 정의 할 수 있다. 예 를 들 어 배열 의 구성원 은 Map 이 고 Map 의 구성원 은 대상 등 이다.이렇게 하려 면 모든 서로 다른 데이터 구 조 를 처리 하기 위해 통 일 된 인터페이스 메커니즘 이 필요 하 다.바로 이런 메커니즘 이다.그것 은 다양한 데이터 구조 에 통 일 된 접근 체 제 를 제공 하 는 인터페이스 이다.모든 데이터 구 조 는 Iterator 인 터 페 이 스 를 배치 하면 옮 겨 다 니 는 작업 을 완성 할 수 있 으 며, 이러한 옮 겨 다 니 는 작업 은 이 데이터 구 조 를 순서대로 처리 하 는 모든 구성원 이다.
Iterator 달력 의 사용:
Iterator 인터페이스 손 으로 쓰기
const arr = [1, 2, 3];
function iterator(arr){
let index = 0;
return {
next: function (){
return index < arr.length ?
{value: arr[index++], done: false} :
{value: undefined, done: true};
}
}
}
const it = iterator(arr);
console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next());
//
Object {value: 1, done: false}
Object {value: 2, done: false}
Object {value: 3, done: false}
Object {value: undefined, done: true}
Iterator 의 옮 겨 다 니 는 과정:
2 Symbol. iterator 속성 을 가 진 데이터 구 조 는 모두 Iterator 인터페이스 가 있다.
const arr = [1, 2, 3];
const set = new Set(['a', 'b', 'c']);
const map = new Map([['a', 1]]);
const itArr = arr[Symbol.iterator]();
const itSet = set[Symbol.iterator]();
const itMap = map[Symbol.iterator]();
console.log(itArr); // Array Iterator {}
console.log(itSet); //SetIterator {"a", "b", "c"}
console.log(itMap); //MapIterator {"a" => 1}
주의 대상 은 ymbol. iterator 속성 이 없습니다.그래서 대상 은 Iterator 인터페이스
const obj = {}; console.log(obj[Symbol.iterator]);//undefind
가 없습니다.3. for... 순환
const ofArr = [1, 2, 3, 4];
for(let i of ofArr){
console.log(i); // 1 2 3 4
}
const m = new Map();
m.set('a', 1).set('b', 2).set('c', 3);
for(let data of m){
console.log(data);
}
// (2) ["a", 1] (2) ["b", 2] (2) ["c", 3]
for(let [key, value] of m){
console.log(key, value);
}
//
a 1
b 2
c 3
for.. of 순환 은 iterator 인터페이스 가 있 는 모든 데 이 터 를 옮 겨 다 닐 수 있 습 니 다.원생 Iterator 인 터 페 이 스 를 갖 춘 데이터 구 조 는 다음 과 같다.
NodeList.prototype[Symbol.iterator] = Array.prototype[Symbol.iterator];
다음은 배열 과 유사 한 대상 이 배열 의 Symbol. iterator 방법 을 호출 하 는 예 입 니 다.
let iterable = {
0: 'a',
1: 'b',
2: 'c',
length: 3,
[Symbol.iterator]: Array.prototype[Symbol.iterator]
};
for (let item of iterable) {
console.log(item); // 'a', 'b', 'c'
}
일반 대상 에 배열 을 배치 하 는 Symbol. iterator 방법 은 효과 가 없습니다.다음은 구조 함수 에 인 터 페 이 스 를 배치 하 는 예 (코드 는 완 일 봉 블 로그 에서 왔 습 니 다) 입 니 다.
class RangeIterator {
constructor(start, stop) {
this.value = start;
this.stop = stop;
}
[Symbol.iterator]() { return this; }
next() {
var value = this.value;
if (value < this.stop) {
this.value++;
return {done: false, value: value};
}
return {done: true, value: undefined};
}
}
function range(start, stop) {
return new RangeIterator(start, stop);
}
for (var value of range(0, 3)) {
console.log(value); // 0, 1, 2
}
이상 은 모두 개인 적 인 이해 입 니 다. 잘못된 점 이 있 으 면 바로 말씀 해 주 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.