原生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 相关文章推荐
Dom在ajax技术中的作用说明
Oct 25 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
May 11 Javascript
详解JavaScript异步编程中jQuery的promise对象的作用
May 03 Javascript
AngularJS基础 ng-cloak 指令简单示例
Aug 01 Javascript
用原生js统计文本行数的简单示例
Aug 19 Javascript
AngularJS equal比较对象实例详解
Sep 14 Javascript
AngularJS框架的ng-app指令与自动加载实现方法分析
Jan 04 Javascript
深入理解ES6学习笔记之块级作用域绑定
Aug 19 Javascript
jQuery使用zTree插件实现可拖拽的树示例
Sep 23 jQuery
node下使用UglifyJS压缩合并JS文件的方法
Mar 07 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
node解析修改nginx配置文件操作实例分析
Nov 06 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注入点构造代码
2008/06/14 PHP
一致性哈希算法以及其PHP实现详细解析
2013/08/24 PHP
46 个非常有用的 PHP 代码片段
2016/02/16 PHP
PHP与Ajax相结合实现登录验证小Demo
2016/03/16 PHP
DOM精简教程
2006/10/03 Javascript
js wmp操作代码小结(音乐连播功能)
2008/11/08 Javascript
JavaScript 页面坐标相关知识整理
2010/01/09 Javascript
Jquery ThickBox插件使用心得(不建议使用)
2010/09/08 Javascript
JS解决url传值出现中文乱码的另类办法
2013/04/08 Javascript
jQery使网页在显示器上居中显示适用于任何分辨率
2014/06/09 Javascript
javascript实现下班倒计时效果的方法(可桌面通知)
2015/07/10 Javascript
jquery按回车键实现表单提交的简单实例
2016/05/25 Javascript
图文介绍Vue父组件向子组件传值
2018/02/17 Javascript
Node.js Express安装与使用教程
2018/05/11 Javascript
vue2路由基本用法实例分析
2020/03/06 Javascript
[02:38]2018年度DOTA2最佳劣单位选手-完美盛典
2018/12/17 DOTA
Python os模块介绍
2014/11/30 Python
python urllib爬取百度云连接的实例代码
2017/06/19 Python
python密码错误三次锁定(实例讲解)
2017/11/14 Python
python3下使用cv2.imwrite存储带有中文路径图片的方法
2018/05/10 Python
学习Django知识点分享
2019/09/11 Python
python脚本实现音频m4a格式转成MP3格式的实例代码
2019/10/09 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python实现加密接口测试方法步骤详解
2020/06/05 Python
Python实现简单猜数字游戏
2021/02/03 Python
如何在网站上添加谷歌定位信息
2016/04/16 HTML / CSS
柯基袜:Corgi Socks
2017/01/26 全球购物
资源环境与城市管理专业推荐信
2013/11/30 职场文书
求职简历推荐信范文
2013/12/02 职场文书
学生社团文化节开幕式主持词
2014/03/28 职场文书
2014年清明节网上祭英烈寄语
2014/04/09 职场文书
幼儿园个人师德总结
2015/02/06 职场文书
幼儿园园长个人总结
2015/03/02 职场文书
党员学习中国梦心得体会
2016/01/05 职场文书
oracle覆盖导入dmp文件的2种方法
2021/05/21 Oracle
一文搞懂Python Sklearn库使用
2021/08/23 Python