美文网首页
第7章迭代器模式

第7章迭代器模式

作者: 入秋未凉的海 | 来源:发表于2017-10-09 17:37 被阅读0次

第7章迭代器模式

7.1 jQuery中的迭代器

$.each([1,2,3],function(){
    console.log('当前下标为'+i);
    console.log('当前值为'+n);
})

7.2 实现自己的迭代器

var each = function(ary,callback){
    for(var i=0,l=ary.length;i<l;i++){
        callback.call(ary[i],i,ary[i]);
    }
};

each([1,2,3],function(i,n){
    alert([i,n]);
});

7.3 内部迭代和外部迭代

1内部迭代器

内部已经定义好了迭代规则

var compare = function(arr1,arr2){
    if(arr1.length!==arr2.length){
        throw new Error('arr1和arr2不相等');
    }
    each(arr1,function(i.n){
        if(n!==arr2[i]){
            throw new Error('arr1和arr2不相等');
        }
    })
    alert('arr1和arr2相等');
}

compare([1,2,3],[1,2,4]);

2外部迭代器

外部迭代器必须显式地请求迭代下一个元素

外部迭代器增加了一些调用的复杂度,但相对也增强了迭代器的灵活性,可以手工控制迭代的过程或者顺序

var Iterator = function(obj){
    var current = 0;

    var next = function(){
        current+=1;
    }
    var isDone = function(){
        return current>=obj.length;
    }
    var getCurrItem = function(){
        return obj[current];
    }
    return {
        next:next,
        isDone:isDone,
        getCurrItem:getCurrItem
    }
}

var compare = function(iterator1,iterator2){
    while(!iterator1.isDone()&&!iterator2.isDone()){
         if(iterator1.getCurrItem()!==iterator2.getCurrItem()){
            throw new Error('iterator1和iterator2不相等');
         }
         iterator1.next();
         iterator2.next();
    }
    alert('iterator1和iterator2相等');

}

var iterator1 = Iterator([1,2,3]);
var iterator2 = Iterator([1,2,3]);

compare(iterator1,iterator2);

7.4 迭代类数组对象和字面量对象

类数组对象:比如arguments,{'0':'a','1':'b'}等

for in语句可以迭代普通字面量对象的属性

jQuery中提供了$.each函数封装各种迭代行为:

$.each = function(){
    var value,
        i = 0,
        length = obj.length,
        isArray = isArraylike(obj);
        if(isArray){//迭代类数组
            for(;i<length;i++){
                value = callback.call(obj[i],i,obj[i]);
                if(value===false){
                    break;
                }
            }
        }else{
            for(i in obj){
                value = callback.call(obj[i],i,obj[i]);
                if(value === false){
                    break;
                }
            }
        }
    return obj;
};

7.5 倒序迭代器

var reverseEach = function(arr,callback){
    for(var l = arr.length-1;l>=0;l--){
        callback(l,arr[l]);
    }
}
reverseEach([0,1,2],function(i,n){
    console.log(n);
});

7.6 中止迭代器

var each = function(ary,callback){
    for(var i = 0, l = ary.length; i < l; i++){
        if(callback(i,ary[i])===false){
            break;
        }
    }
};
each([1,2,3,4,5],function(i,n){
    if( n > 3 ){
        return false;
    }
    console.log(n);
})

7.7 迭代器模式的应用举例

相关文章

  • 第7章迭代器模式

    第7章迭代器模式 7.1 jQuery中的迭代器 7.2 实现自己的迭代器 7.3 内部迭代和外部迭代 1内部迭代...

  • 设计模式(17) 迭代器模式

    迭代器模式 基于IEnumerable的实现 使用场景 迭代器模式的优缺点 迭代器模式 迭代器模式用于顺序访问集合...

  • 第5章 -行为型模式-迭代器模式

    一、迭代器模式的简介 二、迭代器模式的优缺点 三、迭代器模式的实例

  • 行为型模式:迭代器模式

    LieBrother原文:行为型模式:迭代器模式 十一大行为型模式之六:迭代器模式。 简介 姓名 :迭代器模式 英...

  • Iterator模式

    迭代器模式(Iterator模式) 定义: 迭代器(Iterator)模式,又叫做游标(Cursor)模式。 ...

  • 迭代器模式

    一、迭代器模式介绍 二、迭代器模式代码实例

  • 设计模式 | 迭代器模式及典型应用

    本文的主要内容: 介绍迭代器模式 源码分析迭代器模式的典型应用Java集合中的迭代器模式Mybatis中的迭代器模...

  • 设计模式系列——迭代器模式

    迭代器模式介绍 迭代器模式是行为模式之一,又称为(Cursor)模式。迭代器模式源于对容器的访问,如List,Ma...

  • php设计模式——迭代器模式

    迭代器模式 说明 迭代器模式是遍历集合的成熟模式,迭代器模式的关键是将遍历集合的任务交给一个叫做迭代器的对象,它的...

  • JavaScript设计模式五(迭代器模式)

    JavaScript设计模式五(迭代器模式) 迭代器模式的定义: 迭代器模式的意思就是提供一种方法能够顺序的访问聚...

网友评论

      本文标题:第7章迭代器模式

      本文链接:https://www.haomeiwen.com/subject/qtmpyxtx.html