迭代器模式
ES6 中的迭代器 Iterator 相信大家都不陌生,迭代器用于遍历容器(集合)并访问容器中的元素,而且无论容器的数据结构是什么(Array、Set、Map 等),迭代器的接口都应该是一样的,都需要遵循 迭代器协议。
迭代器模式解决了以下问题:
- 提供一致的遍历各种数据结构的方式,而不用了解数据的内部结构
- 提供遍历容器(集合)的能力而无需改变容器的接口
一个迭代器通常需要实现以下接口:
- hasNext():判断迭代是否结束,返回 Boolean
- next():查找并返回下一个元素
为 Javascript 的数组实现一个迭代器可以这么写:
const item = [1,'red',false,3.14]
// 迭代器
function Iterator(items) {
this.items = items
this.index = 0
}
Iterator.prototype = {
hasNext :function () {
return this.index < this.items.length
},
next:function () {
return this.items[this.index++]
}
}
验证一下迭代器:
const iterator = new Iterator(item);
while(iterator.hasNext()){
console.log(iterator.next());
}
输出:
1, red, false, 3.14