es6的Iterator(迭代器)
迭代器容許每次訪問數據集合的一個元素,當指針指向數據集合最後一個元素是,迭代器便會退出。它提供了 next() 函數來遍歷一個序列,這個方法返回一個包含 done 和 value 屬性的對象。
var arr = [1,2,3,4,5,6];
for(var i = 0;i<arr.length;i++){
console.log(arr[i]);
}
//迭代器 提高 訪問具備接口數據的效率
//迭代器 他用來訪問具備遍歷接口數據的,它有一個next(理解指針-1)方法
//next 將當前指針移到下一個位置,返回一個對象{value:,done:}
//使用迭代器
//可遍歷接口
var iter = arr[Symbol.iterator]();
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
//哪些數據有 遍歷接口
//數組 Map Set 類數組
var obj = {};
console.log(obj);//沒有接口
var s = new Set([1,2,3]);
console.log(s);//有接口
let itera = s[Symbol.iterator]();
console.log(itera.next());
var m = new Map([["age,23"],["sex","女"]]);
m.set("name","姜姜");
console.log(m);
var i = m[Symbol.iterator]();
console.log(i.next());
console.log(i.next());
console.log(i.next());
let tags =document.getElementsByName("div");
console.log(tags);
自定義的迭代器
var arr = [1,2,3,4,5,6];
function Iterator(arr){
let i = -1;
function next(){
i++;
let value;
let done = false;
if(i == arr.length) {
value = undefined;
done = true;
}else{
value = arr[i];
}
return {valye:arr[i],done:done};
}
return {next:next};
}
let iter =Iterator(arr);
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());
console.log(iter.next());