实现jQuery.each方法

参考JavaScript专题之jQuery通用遍历方法each的实现

$.each是一个通用的迭代函数,可以用来迭代数组与对象。

$.each(arr,function(index,value){     …… })  $.each(obj,function(prop,value){     …… })

$.each()函数和 $(selector).each()是不一样的,那个是专门用来遍历一个jQuery对象。$.each()函数可用于迭代任何集合,无论是“名/值”对象或数组。

那么我们该怎么实现这样一个 each 方法呢?

首先,我们肯定要根据参数的类型进行判断,如果是数组,就调用 for 循环,如果是对象,就使用 for in 循环。

function each(obj,callback){     if(Array.isArray(obj)){         for(var i=0;i<obj.length;i++){             callback.call(obj[i],i,obj[i]);         }     }else{         for(var prop in obj){             callbackcall(obj[prop],prop,obj[prop]);         }     } }

使用call调用回调函数是为了保证this的正确指向。

这个函数看起来与原生的forEach方法没有什么区别,但是$.each是支持在回调函数中返回return false来终止循环的。
这里我们也可以通过监测callback返回的值来实现:

function each(obj,callback){     if(Array.isArray(obj)){         for(var i=0;i<obj.length;i++){             if(callback(i,obj[i]) === false){                 break;             }         }     }else{         for(var prop in obj){             if(callback(prop,obj[prop]) === false){                 break;             }         }     } }

分享