// 简单迭代器
// var arr = [1,2,3]
// var each = function( ary, callback ){
// for ( var i = 0, l = ary.length; i < l; i++ ){
// callback(i, ary[i] ); // 把下标和元素当作参数传给callback 函数
// }
// };
// each( arr, function( i, n ){
// console.log( [ i, n ] );
// });
// ---------------------------------------------------------
// 原生迭代器
// class Iterator {
// constructor(conatiner) {
// this.list = conatiner.list
// this.index = 0
// }
// next() {
// if (this.hasNext()) {
// return this.list[this.index++]
// }
// return null
// }
// hasNext() {
// if (this.index >= this.list.length) {
// return false
// }
// return true
// }
// }
// class Aggregate {
// constructor(list) {
// this.list = list
// }
// getIterator() {
// return new Iterator(this)
// }
// }
// const ConcreteAggregate = new Aggregate([1, 2, 3, 4, 5])
// const ConcreteIterator = ConcreteAggregate.getIterator()
// while(ConcreteIterator.hasNext()) {
// console.log(ConcreteIterator.next())
// }
// ---------------------------------------------------------
// 简单迭代器
// let arr = [1, 2, 3, 4]
// let m = new Map()
// m.set('a', 100)
// m.set('b', 200)
// function each(data) {
// // 生成遍历器
// let iterator = data[Symbol.iterator]()
// let item = {done: false}
// while (!item.done) {
// item = iterator.next()
// if (!item.done) {
// console.log(item.value)
// }
// }
// for (let item of data) {
// console.log(item)
// }
// }
// each(arr)
// each(m)
// ---------------------------------------------------------
// 判断两个数组是否完全相等
// 内部迭代器
// const each = (arr, callback) => {
// for (let i in arr) {
// callback(i, arr[i]);
// }
// }
// const compare = (arr1, arr2) => {
// const flags = [];
// if (arr1.length !== arr2.length) {
// flags.length = 1
// return '不相等(长度)';
// }
// each(arr1, function (i, n) {
// if (n !== arr2[i]) {
// flags.push(i)
// }
// })
// return flags.length > 0 ? '不相等' : '相等'
// }
// const aa = compare([1, 2, 3], [1, 3, 3])
// console.log(aa)
// console.log('----------------');
// ---------------------------------------------------------
// 外部迭代器
// const Iterator = (obj) => {
// let current = 0;
// const next = () => {
// current += 1;
// }
// const isDone = () => {
// return current >= obj.length;
// }
// const getCurrentItem = () => {
// return obj[current];
// }
// return {
// next,
// isDone,
// getCurrentItem
// }
// }
// const compare1 = function (iterator1, iterator2) {
// while (!iterator1.isDone() && !iterator2.isDone()) {
// if (iterator1.getCurrentItem() !== iterator2.getCurrentItem()) {
// console.log('不相等');
// return;
// }
// iterator1.next();
// iterator2.next();
// }
// console.log('相等');
// return;
// }
// const iterator1 = Iterator([1, 2, 3]);
// const iterator2 = Iterator([1, 2, 4]);
// compare1(iterator1, iterator2)