迭代器模式
一概念及类别:
1.提供一种方法顺序,访问聚合对象的各个元素,而又不暴露该对象的内部表示
为遍历不同数据结构的 “集合” 提供统一的接口
2.按业务逻辑分内部迭代器和外部迭代器
文章图片
forEach示例:
Array.prototype.forEach_a = function(cb){
//console.log("this=",this);
let len = this.length;
for(var i=0;
i
外部迭代器示例:
let arr=['aaa','bbb','ccc'];
function makeIterator(array){
let nextIndex = 0;
return {
next:function(){
return nextIndex < array.length ? {value:array[nextIndex++],done:false} :{value:undefined,done:true}
}
}
}
let res = makeIterator(arr)
console.log(res.next());
console.log(res.next());
console.log(res.next());
console.log(res.next());
1.创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。
2.第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。
3.第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。
4.不断调用指针对象的next方法,直到它指向数据结构的结束位置。
二.应用场景
【迭代器模式】不想暴露数聚合对象内部结构,提供一个统一的遍历接口
场景举例(比较两个数组是否相等):
function iterator(arr){
let i = 0;
return {
next:function(){
i++;
},
isDone:function(){
if(i < arr.length){
return {value:arr[i],done:false};
}else{
return {value:undefined,done:true};
};
},}
}
function compare(ite1,ite2){
while(!ite1.isDone().done && !ite2.isDone().done){//循环判断两个迭代器是否遍历完
//console.log(ite1.isDone().done,ite2.isDone().done);
console.log('ite1Value='https://www.it610.com/article/,ite1.isDone().value,'ite2Value='https://www.it610.com/article/,ite2.isDone().value);
if(ite1.isDone().value !== ite2.isDone().value){
console.log ('不相等' );
return;
}else{
ite1.next();
ite2.next();
}}
console.log('相等');
}
var i1 = new iterator([1,2,5,4]);
var i2 = new iterator([1,2,3,4]);
compare(i1,i2);
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- 人生感悟记#环境仪器宋庆国成长记#072
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- 视频转换器哪种好用()
- NeuVector 会是下一个爆款云原生安全神器吗()
- 操作系统|[译]从内部了解现代浏览器(1)
- 探索免费开源服务器tomcat的魅力
- 机器学习|机器学习 Andrew Ng《Machine Learning》课程笔记1
- 《机器学习实战》高清中文版PDF英文版PDF+源代码下载
- 机器学习一些简单笔记