ES6之Iterator迭代器

迭代原理
要想学好迭代器,就得将迭代先了解搞懂

从一个数据集合当中按一定的顺序,不断取出数据(不能确定数据的多少)的过程就称之为迭代

迭代与遍历的区别
迭代:强调是依次取出,不能确定取出的数据有多少,也不能去保证可以将数据全部的取出

举个例子:就比如,你做一个产品时,也不知道产品最后呈现的样子,只能等做出来了,看客户有什么不满意的地方,再进行改进

遍历:强调已知数据的多少,可循环出所有数据

迭代器
迭代器就是对迭代的过程进行了封装,通常为对象。
迭代器和生成器主要用于react框架中

是否为迭代器的条件:
判断是否有得到下一个数据的能力
判断是否有后续数据的能力

迭代模式
一种设计模式,用于同一迭代的过程,并且规范迭代器的规格

在js中规定,如果一个对象有next(),并且返回一个对象,就称之为这个对象为迭代器

const obj = {
	next() {	//得到下一个数据
		return {
			value : 1,   //数据,数量一般都是未知
			done : false,  //判断是否有后续数据,一般为Boolean类型,为false时迭代还没完成,为true时,就是迭代已经完成,后续没有数据了
		}
	}
}

Iterator作用

  • 为各种数据结构,提供一个统一的、简便的访问接口;
  • 使得数据结构的成员能够按某种次序排列
  • Iterator可用遍历命令for...of循环,只能循环一个可以迭代的对象,像Array,函数的 arguments 对象、set容器、map容器、String、都可以用for of遍历
const arr = [1,2,3,4,5];
//创建一个迭代器
const iterator = { //用于迭代数组的对象
	i : 0,
	next(){ 
		var result = {
			value : arr[this.i],  //数据
			done : this.i >= arr.length   //当其大于等于数组的长度时就没有拿到后续数据的能力
		}
		this.i ++;    //如果数据存在,返回当前数据的并将当前数据位置的标识递增+1
		return result;  //返回数据
	}
}
console.log(iterator)   //当前这个对象就为迭代器
console.log(iterator.next())  //取数据

//让迭代器自己取数据,直到没有数据为止
let data = iterator.next();
while(!data.done){  // 没有数据时
	console.log(data.value)
	data = iterator.next();
} 
console.log("迭代完成")

在这里插入图片描述
创建迭代器的函数

//创建迭代器的函数
function createIterator(arr){
	let i = 0;
	return {
		next(){
			let result = {
				value : arr[i],
				done : i >= arr.length
			}
			i ++;
			return result;
		}
	}		
}
const iter = createIterator(arr) 

可迭代对象
ES6中,如果对象具有知名符号的属性Symbol.interator,就表示该对象可以迭代
ES6及之后,数组及类数组就可以直接创建可迭代对象
展开运算符(...)可用于迭代对象,迭代对象的内容可直接添加到数组当中去

创建斐波那契数列迭代器

function FeiboInderator() {
    let arr = [0, 1]
    let i = 1;
    return {
        next() {
            if (arr[i] === undefined) {
                arr.push(arr[i - 1] + arr[i - 2])
            }
            let val = arr[i]
            i++
            return val
        }
    }
}
const iter = FeiboInderator();
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值