自定义迭代器方法

写一个迭代器的类

迭代一个数组或者字符串,考虑要有next()方法,要有[Symbol.iterator]属性等。

class demoIterator {
  constructor(param) {
	this.count = 0;
	this.arr = param;
	this.limit = param.length;
  }
  next() {
	if (this.count <= this.limit) {
	  return { done: false, value: this.param[this.count] };
	} else {
	  return { done: true, value: undefined }
	}
  }	
  [Symbol.iterator]() {
    return this;
  }
}

这样的迭代器只能迭代一个实例,为了让一个可迭代对象能够创建多个迭代器,必须每创建一个迭代器就对应一个新计数器。为此, 可以把计数器变量放到闭包里,然后通过闭包返回迭代

class demoIterator {
  constructor(param) {
	this.arr = param;
	this.limit = param.length;
  }
 [Symbol.iterator]() { 
   let count = 0,
   limit = this.limit; 
   return {
     next() {
        if (count <= limit) {
          return { done: false, value: this.arr[count] };
        } else {
          return { done: true, value: undefined };
        }
	 } 
    };
  } 
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值