Iterator
Iterator
是 ES6 引入的一種新的遍歷機制,迭代器有兩個核心概念:
- 迭代器是一個統一的接口,它的作用是使各種數據結構可被便捷的訪問,它是通過一個鍵爲
Symbol.iterator
的方法來實現。 - 迭代器是用於遍歷數據結構元素的指針(如數據庫中的遊標)。
迭代過程
- 通過
Symbol.iterator
創建一個迭代器,指向當前數據結構的起始位置 - 隨後通過
next
方法進行向下迭代指向下一個位置,next
方法會返回當前位置的對象,對象包含了value
和done
兩個屬性, value 是當前屬性的值, done 用於判斷是否遍歷結束 - 當 done 爲
true
時則遍歷結束
例子展示
const items=[1,3,4,6,8,9];
const ss=items[Symbol.iterator]();
let a1=ss.next();
console.log(a1);
可迭代的數據結構
Array、String、Map、Set
for ...of
循環
【1】Array
const items=[1,3,4,6,8,9];
for(let item of items){
console.log(item);
}
【2】String
const items="stringforsomething"
for(let item of items){
console.log(item);
}
【3】Map
遍歷key和value
let maps=new Map();
maps.set(0,"hello");
maps.set(1,"hello1");
maps.set(2,"hello2");
maps.set(3,"hello3");
for(let [key,value] of maps){
console.log(key+"="+value);
}
let maps=new Map();
maps.set(0,"hello");
maps.set(1,"hello1");
maps.set(2,"hello2");
maps.set(3,"hello3");
for(let [key,value] of maps.entries()){
console.log(key+"="+value);
}
只遍歷key
let maps=new Map();
maps.set(0,"hello");
maps.set(1,"hello1");
maps.set(2,"hello2");
maps.set(3,"hello3");
for(let key of maps.keys()){
console.log(key);
}
只遍歷value
let maps=new Map();
maps.set(0,"hello");
maps.set(1,"hello1");
maps.set(2,"hello2");
maps.set(3,"hello3");
for(let value of maps.values()){
console.log(value);
}
【4】Set
遍歷整個set
let sets=new Set();
sets.add(12);
sets.add('hello');
sets.add('hello2');
sets.add('hello3');
sets.add('hello4');
for(let item of sets){
console.log(item);
}
只遍歷key
let sets=new Set();
sets.add(12);
sets.add('hello');
sets.add('hello2');
sets.add('hello3');
sets.add('hello4');
for(let key of sets.keys()){
console.log(key);
}
只遍歷value
let sets=new Set();
sets.add(12);
sets.add('hello');
sets.add('hello2');
sets.add('hello3');
sets.add('hello4');
for(let value of sets.values()){
console.log(value);
}
遍歷key和value
let sets=new Set();
sets.add(12);
sets.add('hello');
sets.add('hello2');
sets.add('hello3');
sets.add('hello4');
for(let [key,value] of sets.entries()){
console.log(key,value);
}
普通對象的迭代
const arrayLink = {length: 3, 0: "zero", 1: "one",2:"hello"}
for(let item of Array.from(arrayLink)){
console.log(item);
}