<script>
//迭代器(遍历器) 生成器
// 数据的迭代
//数组遍历 对象 Map Set
//对数组的迭代
//1.for
//2.map forEach filter
//迭代器:是个特殊的对象,专门为可迭代对象设计的统一接口。这个方法用来遍历数据。
//特点 每个迭代器都有next方法,每次执行next返回一个结果对象(value ,done)
//valve 每次迭代的数据, done 迭代是否结束 Boolean
//每个迭代器有默认指针开始时指向数据结构的第一个值,每次调用next方法,返回当前值,指针下移。
//每个迭代器支持 for of 循环
// let arr = [1, 2, 3, 4];
// arr.iterator.next() {value: 1,down : false};
// arr.iterator.next() {value: 2,down : false};
// arr.iterator.next() {value: 3,down : false};
// arr.iterator.next() {value: 4,down : false};
// arr.iterator.next() {value: undefined,down : true};
///创建一个可以迭代数组的迭代器
// function createIterator(arr = []) {
// let nextIndex = 0;
// return {
// next() {
// if (arr.length - 1 < nextIndex) {
// return {
// value: undefined,
// done: true
// }
// } else {
// return {
// value: arr[nextIndex++],
// done: false
// }
// }
// }
// }
// }
// var i = createIterator(arr);
// i.next(); //{value:1,done: false}
// i.next();
// i.next();
//默认的Iterator接口
// Array Map Set String argument NodeLists
//Array Map Set
//enteies(),keys(),values() // forEach
// let arr = [1, 2, 3, 4];
// let map = new Map([
// ['name', 'aaa'],
// ['age', 12],
// ['bobbit', 'dog']
// ])
// let set = new Set([1, 2, 3, 4, 5]);
//entries 迭代器 对于数组 返回 [index,value] Map[key,value] Set[key,key]
// let arrEntries = arr.entries();
// let mapEntries = map.entries();
// let setEntries = set.entries();
// for (let item of arrEntries) {
// console.log(item)
// }
// for (let item of mapEntries) {
// console.log(item)
// }
// for (let item of setEntries) {
// console.log(item)
// }
//所有的迭代器都有 Symbol.iterator 属性,必须通过中括号形式访问[Symble.iterator],返回默认的迭代器。
// for (let item of arr[Symbol.iterator]()) {
// console.log(item)
// }
//原理
//数组中的迭代器指针,每次指向下一个索引
//Map Set 会把邻接链表 转化为单向链表 指针每次指向一个节点,指针下移
// for (let item of arr) { //arr[Symbol.iterator]() => arr.values()
// console.log(item)
// }
// for (let key of map) { //map[Symbol.iterator]() => map.entries()
// console.log(key)
// }
// for (let key of set) { //set[Symbol.iterator]() => set.keys()
// console.log(key)
// }
///生成器 Generator
//用于生成迭代器
//生成器是函数 * yieid //产生
// function* createIterator() {
// yield 1;
// yield 2;
// yield 3;
// }
// var i = createIterator()
</script>