原生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 相关文章推荐
一个js实现的所谓的滑动门
May 23 Javascript
JavaScript实现的双向跨域插件分享
Jan 31 Javascript
jQuery mobile类库使用时加载导航历史的方法简介
Dec 04 Javascript
jQuery Mobile弹出窗、弹出层知识汇总
Jan 05 Javascript
Vue.js组件使用开发实例教程
Nov 01 Javascript
Javascript Event(事件)的传播与冒泡
Jan 23 Javascript
详解webpack4之splitchunksPlugin代码包分拆
Dec 04 Javascript
puppeteer实现html截图的示例代码
Jan 10 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
Aug 02 Javascript
vue-element-admin 菜单标签失效的解决方式
Nov 12 Javascript
es6中class类静态方法,静态属性,实例属性,实例方法的理解与应用分析
Feb 15 Javascript
JavaScript高级程序设计之变量与作用域
Nov 17 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
无线电广播的开始
2002/01/30 无线电
PHP 进程锁定问题分析研究
2009/11/24 PHP
IIS下PHP的三种配置方式对比
2014/11/20 PHP
php压缩和解压缩字符串的方法
2015/03/14 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
jQuery控制图片的hover效果(smartRollover.js)
2012/03/18 Javascript
用js来获取上传的文件名纯粹是为了美化而用
2013/10/23 Javascript
javascript 作用于作用域链的详解
2017/09/27 Javascript
深入浅析Vue中的Prop
2018/06/10 Javascript
微信小程序将字符串生成二维码图片的操作方法
2018/07/17 Javascript
Vue实现简易计算器
2020/02/25 Javascript
Vue Router中应用中间件的方法
2020/08/06 Javascript
如何在现代JavaScript中编写异步任务
2021/01/31 Javascript
python判断windows隐藏文件的方法
2014/03/21 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Python利用BeautifulSoup解析Html的方法示例
2017/07/30 Python
python爬虫之urllib库常用方法用法总结大全
2018/11/14 Python
使用PyQt4 设置TextEdit背景的方法
2019/06/14 Python
Python 批量刷博客园访问量脚本过程解析
2019/08/30 Python
给大家整理了19个pythonic的编程习惯(小结)
2019/09/25 Python
PyCharm2019安装教程及其使用(图文教程)
2019/09/29 Python
Pytorch 实现冻结指定卷积层的参数
2020/01/06 Python
浅谈在django中使用filter()(即对QuerySet操作)时踩的坑
2020/03/31 Python
Python 如何批量更新已安装的库
2020/05/26 Python
python ETL工具 pyetl
2020/06/07 Python
用CSS3打造HTML5的Logo(实现代码)
2016/06/16 HTML / CSS
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
JACK & JONES瑞典官方网站:杰克琼斯欧式风格男装
2017/12/23 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
意大利折扣和优惠券网站:Groupalia
2019/10/09 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
服装公司总经理岗位职责
2013/11/30 职场文书
团员个人的自我评价
2013/12/02 职场文书
离婚协议书的书写要求
2014/09/17 职场文书
紧急迫降观后感
2015/06/15 职场文书
解决Redis启动警告问题
2022/02/24 Redis