迭代器模式是指提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该对象的内部表示。
迭代器模式可以把迭代的过程从业务逻辑中分离出来,在使用迭代器模式之后,即使不关心对象的内部构造,也可以按顺序访问其中的每个元素
许多浏览器都支持 Javascript  Array.prototype.forEach
迭代器可以分为 内部迭代器 和 外部迭代器

一、jQuery 中的迭代器
1 $.each( [1,2,3,4], function (i, n) {
2     console.log( "当前下表为:" + i + " , 当前值为:" + n );
3 });

 


二、自实现一个迭代器
1 // 自己实现一个数组迭代器
2 var each = function( arry, callback ){
3     for( var i = 0, l = arry.length; i < l; i++){
4         callback.call( arry[i], i, arry[ i ]);
5     }
6 };
7 each([1,2,3,4], function (i, n) {
8     console.log( i + " - " + n ); // 输出数组下标和值
9 });

 

三、内部迭代器

  上边的 each 函数属于内部迭代器, each 函数内部已经定义好了迭代原则,它完全接手整个迭代过程,外部只需要一次初始调用。
  内部迭代器的优点也刚好是它的缺点 - 使用方便,迭代交互也仅仅是一次初始调用
  示例: 在不改写 each 本身的代码前提,实现判断两个数组里元素的值是否完全相等
 1 //判断两个数组的值是否完全相等
 2 var compare = function( arry1, arry2){
 3     if( arry1.length !== arry2.length ){
 4         throw new Error( "arry1和arry2不相等" );
 5     }
 6     each( arry1, function( i, n ){
 7         if( n !== arry2[i] ){
 8             throw new Error("arry1和arry2不相等");
 9         }
10     });
11     console.log( "arry1和arry2相等" );
12 };
13 
14 compare( [1,2,3,4], [1,2,3]);

 

 四、外部迭代器
  外部迭代器必须显式地请求迭代下一个元素
  外部迭代器增加了一些调用的复杂度,但相对的也增强了迭代器的灵活性,我们可以手工控制迭代的过程或者顺序
  示例: 重写 compare

    外部迭代器:

 1 // 外部迭代器
 2 var Iterator = function (obj) {
 3         var current = 0;
 4 
 5         var next = function(){
 6             current += 1;
 7         };
 8 
 9         var isDone = function(){
10             return current >= obj.length;
11         };
12 
13         var getCurrItem = function(){
14             return obj[ current ];
15         };
16 
17     return {
18         next: next,
19         isDone: isDone,
20         getCurrItem: getCurrItem
21     }
22 }
View Code

相关文章:

  • 2021-09-25
  • 2021-10-11
  • 2022-02-09
猜你喜欢
  • 2021-09-26
  • 2022-03-03
  • 2022-12-23
  • 2022-12-23
  • 2021-08-27
  • 2021-10-28
相关资源
相似解决方案