1.迭代器模式:提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示,迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以顺序访问其中的每个元素
代码实现(1.内部迭代器)
迭代函数内部定义好了迭代规则,它完全接手整个迭代过程,外部只需要一次初始调用。内部迭代器在调用的时候非常方便,但这也刚好是内部迭代器的缺点,因为内部迭代器的迭代规则已经被提前规定。
//比如实现判断两个数组是否相等 each函数无法同时迭代两个数组
function each(arr,fun){
for(let i =0; i < arr.length;i++){
fun(i,arr[i])
}
}
each([1,2,3],(index,item)=>{
console.log(index,item)
})
//比较两个函数是否相等
function compare(arr1,arr2){
if(arr1.length !== arr2.length){
throw new Error ( '不等' );
}
each(arr1,(index,item)=>{
if(item !== arr2[index]){
throw new Error ( '不等' );
}
})
console.log("相等")
}
compare([1,2,3],[1,2,2])
代码实现(2.外部迭代器)
//外部迭代器必须显式的请求迭代下一个元素,外部迭代器增加了一些调用的复杂度,但相对也增强了迭代器的灵活性,我们可以手工控制迭代的过程或者顺序
var compare = function( iterator1, iterator2 ){
while( !iterator1.isDone() && !iterator2.isDone() ){
if ( iterator1.getCurrItem() !== iterator2.getCurrItem() ){
throw new Error ( 'iterator1 和 iterator2 不相等' );
}
iterator1.next();
iterator2.next();
}
console.log( 'iterator1 和 iterator2 相等' );
}
var iterator1 = Iterator( [ 1, 2, 3 ] );
var iterator2 = Iterator( [ 1, 2, 3 ] );
compare( iterator1, iterator2 ); // 输出:iterator1 和 iterator2 相等
网友评论