原生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 中介者模式实例
Dec 16 Javascript
制作高质量的JQuery Plugin 插件的方法
Apr 20 Javascript
基于JQuery.timer插件实现一个计时器
Apr 25 Javascript
js和jquery中循环的退出和继续学习记录
Sep 06 Javascript
js实现select二级联动下拉菜单
Apr 17 Javascript
JavaScript实现定时页面跳转功能示例
Feb 14 Javascript
JS自定义滚动条效果简单实现代码
Oct 27 Javascript
纯js封装的ajax功能函数与用法示例
May 14 Javascript
详释JavaScript执行环境与执行栈
Apr 02 Javascript
使用jQuery如何写一个含验证码的登录界面
May 13 jQuery
详解Vue 如何监听Array的变化
Jun 06 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
Dec 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里的单例类写法实例
2015/06/25 PHP
使用PHP实现微信摇一摇周边红包
2016/01/04 PHP
PHP文件操作实例总结
2016/09/27 PHP
php车辆违章查询数据示例
2016/10/14 PHP
Yii框架中sphinx索引配置方法解析
2016/10/18 PHP
PHP第三方登录―QQ登录实现方法
2017/02/06 PHP
为何说PHP引用是个坑,要慎用
2018/04/02 PHP
laravel框架如何设置公共头和公共尾
2019/10/22 PHP
实现checkbox全选、反选、取消JavaScript小脚本异常
2014/04/10 Javascript
jQuery中replaceWith()方法用法实例
2014/12/25 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
jQuery-1.9.1源码分析系列(十一)DOM操作续之克隆节点
2015/12/01 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
微信小程序 刷新上拉下拉不会断详细介绍
2017/05/11 Javascript
js注册时输入合法性验证方法
2017/10/21 Javascript
vuex actions异步修改状态的实例详解
2019/11/06 Javascript
《javascript设计模式》学习笔记三:Javascript面向对象程序设计单例模式原理与实现方法分析
2020/04/07 Javascript
Angular5整合富文本编辑器TinyMCE的方法(汉化+上传)
2020/05/26 Javascript
Vue-cli3生成的Vue项目加载Mxgraph方法示例
2020/05/31 Javascript
基于javascript的无缝滚动动画1
2020/08/07 Javascript
python版简单工厂模式
2017/10/16 Python
python如何派生内置不可变类型并修改实例化行为
2018/03/21 Python
python解决pandas处理缺失值为空字符串的问题
2018/04/08 Python
python贪婪匹配以及多行匹配的实例讲解
2018/04/19 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
Django 实现Admin自动填充当前用户的示例代码
2019/11/18 Python
CSS3混合模式mix-blend-mode/background-blend-mode简介
2018/03/15 HTML / CSS
纯HTML+CSS3制作导航菜单(附源码)
2013/04/24 HTML / CSS
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
英国最大的运动营养公司之一:LA Muscle
2018/07/02 全球购物
大队干部竞选演讲稿
2014/04/28 职场文书
贫困证明模板(3篇)
2014/09/16 职场文书
廉洁自律承诺书范文
2015/04/28 职场文书
广播体操比赛主持词
2015/06/29 职场文书
导游词之青岛崂山
2019/12/27 职场文书