关于JS的迭代器你真的了解吗?
(1) 什么是迭代器呢?
:是确使用户可在容器对象(container,例如链表或数组)上遍访的对象,使用该接口无需关心对象的内部实现细节。 这个解释我们可们从中理解到:迭代器是一个对象,它可以是一个函数,参数是一个容器对象,在函数内部实现容器对象的遍历
如何成为迭代器呢?
在JavaScript中,迭代器也是一个具体的对象,这个对象需要符合迭代器协议(iterator protocol):
1、迭代器协议定义了产生一系列值(无论是有限还是无限个)的标准方式
2、那么在js中这个标准就是一个特定的next方法
next方法的实现?
一个无参数或者一个参数的函数,返回一个应当拥有以下两个属性的对象:
done(boolean)
如果迭代器可以产生序列中的下一个值,则为false。
如果迭代完毕,则为true
value
迭代器返回的任何javascript值。done为true可以省略。
一个小demo
const names = ['詹姆斯','库里','哈登','科比'];
let index = 0;
const namesIterator = {
next:function(){
if(index < names.length){
return {done:false,value:names[index++]}
}else{
return {done:true,value:undefined}
}
}
}
console.log(namesIterator.next());//{ done: false, value: '詹姆斯' }
console.log(namesIterator.next()) //{ done: false, value: '詹姆斯' }
console.log(namesIterator.next()) //{ done: false, value: '哈登' }
console.log(namesIterator.next()) //{ done: false, value: '科比' }
console.log(namesIterator.next()) //{ done: true, value: undefined }