原生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 相关文章推荐
Array的push与unshift方法性能比较分析
Mar 05 Javascript
由JavaScript中call()方法引发的对面向对象继承机制call的思考
Sep 12 Javascript
js 获取后台的字段 改变 checkbox的被选中的状态 代码
Jun 05 Javascript
js操作checkbox遇到的问题解决
Jun 29 Javascript
DOM节点深度克隆函数cloneNode()用法实例
Jan 12 Javascript
jQuery元素的隐藏与显示实例
Jan 20 Javascript
jQuery统计指定子元素数量的方法
Mar 17 Javascript
javascript实现验证IP地址等相关信息代码
May 10 Javascript
跟我学习javascript的严格模式
Nov 16 Javascript
DWR3 访问WEB元素的两种方法实例详解
Jan 03 Javascript
vue中的router-view组件的使用教程
Oct 23 Javascript
vue项目中axios请求网络接口封装的示例代码
Dec 18 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
php5编程中的异常处理详细方法介绍
2008/07/29 PHP
php反弹shell实现代码
2009/04/22 PHP
PHP根据两点间的经纬度计算距离
2014/10/31 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP+MySQL实现模糊查询员工信息功能示例
2018/06/01 PHP
jQuery 幻灯片插件(带缩略图功能)
2011/01/24 Javascript
JS刷新框架外页面七种实现代码
2013/02/18 Javascript
javascript表格的渲染组件
2015/07/03 Javascript
jQuery实现可关闭固定于底(顶)部的工具条菜单效果
2015/11/06 Javascript
Validform+layer实现漂亮的表单验证特效
2016/01/17 Javascript
JavaScript基础知识点归纳(推荐)
2016/07/09 Javascript
AngularJs页面筛选标签小功能
2016/08/01 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
js es6系列教程 - 新的类语法实战选项卡(详解)
2017/09/02 Javascript
JavaScript中引用vs复制示例详析
2018/12/06 Javascript
微信小程序 scroll-view 水平滚动实现过程解析
2019/10/12 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
Python标准库之collections包的使用教程
2017/04/27 Python
解决Linux系统中python matplotlib画图的中文显示问题
2017/06/15 Python
Python面向对象编程之继承与多态详解
2018/01/16 Python
Python实现生成密码字典的方法示例
2019/09/02 Python
使用Python项目生成所有依赖包的清单方式
2020/07/13 Python
12个不为大家熟知的HTML5设计小技巧
2016/06/02 HTML / CSS
HTML5+CSS3:3D展示商品信息示例
2017/01/03 HTML / CSS
HTML5 video循环播放多个视频的方法步骤
2020/08/06 HTML / CSS
Expedia泰国:预订机票、酒店和旅游包(航班+酒店)
2016/09/27 全球购物
植物选择:Botanic Choice
2017/02/15 全球购物
什么是属性访问器
2015/10/26 面试题
写好求职应聘自荐信的三部曲
2013/09/21 职场文书
超市后勤自我鉴定
2014/01/17 职场文书
高中微机老师自我鉴定
2014/02/16 职场文书
实习报告评语
2014/04/26 职场文书
鉴定评语大全
2014/05/05 职场文书
2014年文艺部工作总结
2014/11/17 职场文书
2014年中班下学期工作总结
2014/12/11 职场文书
关于python爬虫应用urllib库作用分析
2021/09/04 Python