原生js实现each方法实例代码详解


Posted in Javascript onMay 27, 2019

jquery里面有个each方法,将循环操作简化、便捷。 随后es出了个forEach方法,两个虽然用法相近,但是不能处理对象类型。且无法通过return true达到continue效果。 此外还有个every方法,该方法虽然可以实现continue效果,但是在处理类数组与对象类型时,完全无用。

在不使用 jquery 的 each 方法时,该如何处理;或者说用原生如何来实现? 前些前写了个类库: jTool , 其中就实现了该方法。

简单实现:

// 通过字面量方式实现的函数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;
   }
  }
 }
}

我们来try一下, 测试下数组、对象、类数组类型及中断效果

数组类型

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

输出如下:

原生js实现each方法实例代码详解 

对象类型

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

输出如下:

原生js实现each方法实例代码详解 

类数组类型

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

输出如下:

原生js实现each方法实例代码详解 

增加中断条件

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);
});

输出如下:

原生js实现each方法实例代码详解 

从结果可以看出来,each方法已经实现了jquery的each功能。且实现如此简单~

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

另推荐个表格组件 gridManager

总结

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

Javascript 相关文章推荐
火狐下table中创建form导致两个table之间出现空白
Sep 02 Javascript
jQuery级联操作绑定事件实例
Sep 02 Javascript
让angularjs支持浏览器自动填表
Nov 10 Javascript
jQuery+jRange实现滑动选取数值范围特效
Mar 14 Javascript
javascript的 {} 语句块详解
Feb 27 Javascript
javascript实现仿百度图片的瀑布流加载效果
Apr 20 Javascript
网页前端登录js按Enter回车键实现登陆的两种方法
May 10 Javascript
jQuery实现边框动态效果的实例代码
Sep 23 Javascript
js仿QQ邮箱收件人选择与搜索功能
Feb 10 Javascript
Vue仿手机qq的实例代码(demo)
Sep 08 Javascript
node.js使用免费的阿里云ip查询获取ip所在地【推荐】
Sep 03 Javascript
微信小程序常见页面跳转操作简单示例
May 01 Javascript
深入学习JavaScript中的bom
May 27 #Javascript
Vue实现根据hash高亮选项卡
May 27 #Javascript
vue使用localStorage保存登录信息 适用于移动端、PC端
May 27 #Javascript
Vue使用localStorage存储数据的方法
May 27 #Javascript
了解javascript中的Dom操作
May 27 #Javascript
Vue项目使用localStorage+Vuex保存用户登录信息
May 27 #Javascript
vue cli3.0 引入eslint 结合vscode使用
May 27 #Javascript
You might like
创建配置文件 用PHP写出自己的BLOG系统 2
2010/04/12 PHP
关于Sphinx创建全文检索的索引介绍
2013/06/25 PHP
PHP 登录完成后如何跳转上一访问页面
2014/01/14 PHP
php用户登录之cookie信息安全分析
2016/05/13 PHP
thinkPHP5.0框架应用请求生命周期分析
2017/03/25 PHP
动态加载js的几种方法
2006/10/23 Javascript
msn上的tab功能Firefox对childNodes处理的一个BUG
2008/01/21 Javascript
深入了解Node.js中的一些特性
2014/09/25 Javascript
javascript中字符串拼接详解
2014/09/26 Javascript
jquery.map()方法的使用详解
2015/07/09 Javascript
详解javascript传统方法实现异步校验
2016/01/22 Javascript
什么是JavaScript中的结果值?
2016/10/08 Javascript
浅析Angular2子模块以及异步加载
2017/04/24 Javascript
jQuery操作DOM_动力节点Java学院整理
2017/07/04 jQuery
javaScript中的空值和假值
2017/12/18 Javascript
详解Vue-cli webpack移动端自动化构建rem问题
2018/04/07 Javascript
vue监听input标签的value值方法
2018/08/27 Javascript
JavaScript实现沿五角星形线摆动的小圆实例详解
2020/07/28 Javascript
ubuntu17.4下为python和python3装上pip的方法
2018/06/12 Python
彻底理解Python中的yield关键字
2019/04/01 Python
Python获取基金网站网页内容、使用BeautifulSoup库分析html操作示例
2019/06/04 Python
Python实现决策树并且使用Graphviz可视化的例子
2019/08/09 Python
Python Django 前后端分离 API的方法
2019/08/28 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
python判断元素是否存在的实例方法
2020/09/24 Python
安装python依赖包psycopg2来调用postgresql的操作
2021/01/01 Python
css3动画效果小结(推荐)
2016/07/25 HTML / CSS
StudentUniverse英国:学生航班、酒店和旅游
2019/08/25 全球购物
基督教婚礼主持词
2014/03/14 职场文书
服装设计师求职信
2014/06/04 职场文书
2015年新学期寄语
2015/02/26 职场文书
2015年暑期社会实践活动总结
2015/03/27 职场文书
关于迟到的检讨书
2015/05/06 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
详细介绍python类及类的用法
2021/05/31 Python
Pytorch distributed 多卡并行载入模型操作
2021/06/05 Python