迭代器详解

1.什么是迭代
从一个数据集合中按照一定的顺序,不断的取出数据的过程

2.迭代和遍历有什么区别
迭代强调的是依次取出,不能确定取出的有多少,也不能保证把数据全部取完

3.什么是迭代器
对迭代过程的封装,通常为对象,不同的语言,表现出来的迭代形式不一样

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

js迭代器
首先js的规定,如果一个对象有next方法,并且返回一个对象,就认为这个对象为迭代器

符合的过程

const obj = {
			next(){   用于得到下一个数据
				return {
					value : xxx  //数据
					done : xxx   //判断是否有后续数据,一般为boolean
				}
			}
		}

数组的遍历与迭代对比

//遍历一个普通数组
const arr = [1,2,3,4,5];
		for(let i = 0;i< arr.length;i++){
			console.log(arr[i])
		}
//迭代一个数组
const iterator = { //用于迭代数组的对象
			i : 0,
			next(){
				var result = {
					// value : ?
					// done : ?
					value : arr[this.i],
					done : this.i >= arr.length
				}
				this.i ++;
				return result;
			}
		}
		console.log(iterator)   //这个对象就为迭代器
		//附加的功能
		//让迭代器自己取数据,知道没有数据为止
		let data = iterator.next();
		while(!data.done){
			console.log(data.value)
			data = iterator.next();
		}
		console.log("迭代完成")

斐波拉契迭代器

function createFeiboIterator(){
			let prev1 = 1;
			let prev2 = 1;  //定义前两位
			let n = 1;  //当前第几位
			return {
				next(){
					let value;
					if(n <= 2){
						value = 1;
					}else{
						value = prev1 + prev2
					}
					const result = {
						value,
						done : false   //迭代器不关心有多少,只关心是否拿得到下一个数据
					}
					prev2 = prev1;
					prev1 = result.value;
					n ++;
					return result
				}
			}
		}
		const iterator = createFeiboIterator()

		// 数组存储的数据是有限的 ,迭代器只关心next

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值