原生JavaScript实现类似jQuery的each方法详解

作者:纸飞机时间:2026-10-24 00:45:24浏览:146

本文详解如何使用原生JavaScript实现类似jQuery的each方法。该方法支持数组、对象及类数组(NodeList)的遍历,并解决了原生forEach无法处理对象及无法通过return实现continue/break的问题。代码展示了类型判断逻辑及回调函数的中断机制,帮助开发者在不依赖jQuery的情况下高效处理集合数据。

背景与需求分析

jQuery库中提供的each方法能够简化并便捷地执行循环操作。随后ECMAScript标准推出了forEach方法,尽管两者用法相似,但均无法直接处理对象类型,且无法通过return true来实现continue(继续)的效果。此外,还有一个every方法,虽然它能实现类似continue的功能,但在处理类数组和对象类型时完全无效。

当不使用jQuery的each方法时,应如何处理?或者说如何用原生JavaScript来实现这一功能?此前笔者编写了一个类库jTool,其中便实现了该方法。

原生each方法实现

以下是简单的实现代码。


// 通过字面量方式实现的函数each
var each = function(object, callback){
 var type = (function(){
   switch (object.constructor){
   case Object:
    return 'Object';
    break;
   case Array:
    return 'Array';
    break;
   case NodeList:
    return 'NodeList';
    break;
   default:
    return 'null';
    break;
  }
 })();
 // 为数组或类数组时, 返回: index, value
 if(type === 'Array' || type === 'NodeList'){
  // 由于存在类数组NodeList, 所以不能直接调用every方法
  [].every.call(object, function(v, i){
   return callback.call(v, i, v) === false ? false : true;
  });
 }
 // 为对象格式时,返回:key, value
 else if(type === 'Object'){
  for(var i in object){
   if(callback.call(object[i], i, object[i]) === false){
    break;
   }
  }
 }
}

功能测试与验证

接下来我们进行测试,验证该实现是否支持数组、对象、类数组类型以及中断效果。

首先测试数组类型。


var _array = [1,2,3,4];
each(_array, function(i, v){
 console.log(i + ': ' + v);
});

输出结果如下。

背景与需求分析 

接着测试对象类型。

var object = {a:1, b:2, c:3} each(object, function(i, v){ console.log(i + ': ' + v); });

输出结果如下。

背景与需求分析 

随后测试类数组类型。


var ele = document.querySelectorAll('div');
each(ele, function(i, v){
 console.log(i + ': ' + v);
});

输出结果如下。

背景与需求分析 

增加中断条件的测试。


var object2 = {name:'baukh', age: '29', six:'男', url: 'www.lovejavascript.com',}
each(object2, function(i, v){
 if(i === 'age'){ //如果存在键值为age的属性时,则输出警告,用于实现continue效果
 console.log('存在键值为age,这家伙已经'+v+'岁了');
 return true;
 }
 if(i === 'six' && v === '男'){//如果存在键值为age的属性时,则输出跳出,用于实现break效果
 console.log('存在键值为six,是个男的,不用关注了~');
 return false;
 }
 console.log(i + ': ' + v);
});

输出结果如下。

背景与需求分析 

从结果可以看出,该each方法已经实现了jQuery中each的功能,且实现过程如此简单。

随笔一行:这是前端最好的时代,这也是前端最坏的时代。众多前端框架层出不穷,随着jQuery在前端行业的慢慢弱化,总是会有一种斯人远去,何者慰藉的感觉。互勉吧,各位。

另推荐一个表格组件gridManager。

总结

以上所述是小编给大家介绍的原生js实现each方法实例代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对本站网站的支持!

作者最新文章