原生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 相关文章推荐
清华大学出版的事半功倍系列 javascript全部源代码
May 04 Javascript
Jquery插件分享之气泡形提示控件grumble.js
May 20 Javascript
javascript获取select值的方法分析
Jul 02 Javascript
解决js图片加载时出现404的问题
Nov 30 Javascript
JS正则表达式比较常见用法
Jan 26 Javascript
Bootstrap3制作自己的导航栏
May 12 Javascript
完美的js图片轮换效果
Feb 05 Javascript
JS+WCF实现进度条实时监测数据加载量的方法详解
Dec 19 Javascript
angularJs中ng-model-options设置数据同步的方法
Sep 30 Javascript
vue 地图可视化 maptalks 篇实例代码详解
May 21 Javascript
微信分享invalid signature签名错误踩过的坑
Apr 11 Javascript
Vue.js获取手机系统型号、版本、浏览器类型的示例代码
May 10 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个人网站架设连环讲(四)
2006/10/09 PHP
ThinkPHP写第一个模块应用
2012/02/20 PHP
PHP中include与require使用方法区别详解
2013/10/19 PHP
PHP与Java对比学习日期时间函数
2016/07/03 PHP
PHP 匿名函数与注意事项详细介绍
2016/11/26 PHP
php技巧小结【推荐】
2017/01/19 PHP
Yii 实现数据加密和解密
2021/03/09 PHP
JS 自定义函数缺省值的设置方法
2010/05/05 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
javascript操作html控件实例(javascript添加html)
2013/12/02 Javascript
JavaScript的9种继承实现方式归纳
2015/05/18 Javascript
javascript实现状态栏中文字动态显示的方法
2015/10/20 Javascript
浅析JavaScript声明变量
2015/12/21 Javascript
JavaScript实现的MD5算法完整实例
2016/02/02 Javascript
JS动态遍历json中所有键值对的方法(不知道属性名的情况)
2016/12/28 Javascript
angular基于ng-alain定义自己的select组件示例
2018/02/23 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
2020/03/08 Javascript
Vue列表循环从指定下标开始的多种解决方案
2020/04/08 Javascript
JavaScript实现串行请求的示例代码
2020/09/14 Javascript
Vue用mixin合并重复代码的实现
2020/11/27 Vue.js
零基础写python爬虫之urllib2中的两个重要概念:Openers和Handlers
2014/11/05 Python
Python2.7读取PDF文件的方法示例
2017/07/13 Python
python删除过期log文件操作实例解析
2018/01/31 Python
python利用Tesseract识别验证码的方法示例
2019/01/21 Python
Python缓存技术实现过程详解
2019/09/25 Python
TensorFlow自定义损失函数来预测商品销售量
2020/02/05 Python
Python datetime 如何处理时区信息
2020/09/02 Python
python 通过pip freeze、dowload打离线包及自动安装的过程详解(适用于保密的离线环境
2020/12/14 Python
北京某公司的.net笔试题
2014/03/20 面试题
2014全国两会心得体会
2014/03/17 职场文书
财产保全担保书范文
2014/04/01 职场文书
工程承诺书怎么写
2014/05/24 职场文书
销售代理协议书
2014/09/30 职场文书
民政工作个人总结
2015/02/28 职场文书
社区法制宣传月活动总结
2015/05/07 职场文书
求职自荐信该如何书写?
2019/06/24 职场文书