原生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 相关文章推荐
jquery控制listbox中项的移动并排序
Nov 12 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
js+xml生成级联下拉框代码
Jul 24 Javascript
jQuery替换字符串(实例代码)
Nov 13 Javascript
JavaScript声明变量时为什么要加var关键字
Sep 29 Javascript
JavaScript常用的返回,自动跳转,刷新,关闭语句汇总
Jan 13 Javascript
jQuery幻灯片带缩略图轮播效果代码分享
Aug 17 Javascript
jquery实现下拉框左右选择功能
Feb 21 Javascript
解决easyui日期时间框ie的兼容的问题
Mar 01 Javascript
node中modules.exports与exports导出的区别
Jun 08 Javascript
对vue事件的延迟执行实例讲解
Aug 28 Javascript
重学 JS:为啥 await 不能用在 forEach 中详解
Apr 15 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自定义加密与解密程序实例
2014/12/31 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
laravel ORM 只开启created_at的几种方法总结
2018/01/29 PHP
JavaScript的面向对象方法以及差别
2008/03/31 Javascript
了解jQuery技巧来提高你的代码
2010/01/08 Javascript
js弹出框轻量级插件jquery.boxy使用介绍
2013/01/15 Javascript
javascript获得网页窗口实际大小的示例代码
2013/09/21 Javascript
用jquery等比例控制图片宽高的具体实现
2014/01/28 Javascript
JavaScript及jquey实现多个数组的合并操作
2014/09/06 Javascript
JavaScript使用循环和分割来替换和删除元素实例
2014/10/13 Javascript
jQuery on()方法使用技巧详解
2015/04/16 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JavaScript简单遍历DOM对象所有属性的实现方法
2015/10/21 Javascript
js replace(a,b)之替换字符串中所有指定字符的方法
2016/08/17 Javascript
Vue表单实例代码
2016/09/05 Javascript
Vue.js每天必学之指令系统与自定义指令
2016/09/07 Javascript
js编写选项卡效果
2017/05/23 Javascript
JS模拟实现京东快递单号查询
2020/11/30 Javascript
[01:14:19]NAVI vs Mineski 2019国际邀请赛淘汰赛 败者组BO1 8.20.mp4
2020/07/19 DOTA
Python使用lxml模块和Requests模块抓取HTML页面的教程
2016/05/16 Python
python编程测试电脑开启最大线程数实例代码
2018/02/09 Python
python3处理含有中文的url方法
2018/05/10 Python
对python中大文件的导入与导出方法详解
2018/12/28 Python
python多线程共享变量的使用和效率方法
2019/07/16 Python
Python sklearn库实现PCA教程(以鸢尾花分类为例)
2020/02/24 Python
Python接口测试数据库封装实现原理
2020/05/09 Python
css3圆角边框和边框阴影示例
2014/05/05 HTML / CSS
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
如何写一个自定义标签
2012/12/28 面试题
庆元旦广播稿
2014/02/10 职场文书
教师国庆节演讲稿范文2014
2014/09/21 职场文书
解除劳动合同证明书模板
2014/11/20 职场文书
新婚姻法离婚协议书范文
2014/11/30 职场文书
文明礼貌主题班会
2015/08/14 职场文书
JavaScript中isPrototypeOf函数
2021/11/07 Javascript
victoriaMetrics库布隆过滤器初始化及使用详解
2022/04/05 Golang