原生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实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
Jun 06 Javascript
javascript弹出页面回传值的方法
Jan 28 Javascript
JavaScript实现对下拉列表值进行排序的方法
Jul 15 Javascript
avalon js实现仿google plus图片多张拖动排序附源码下载
Sep 24 Javascript
jQuery+css实现的时钟效果(兼容各浏览器)
Jan 27 Javascript
聊一聊JS中的prototype
Sep 29 Javascript
基于JavaScript实现自定义滚动条
Jan 25 Javascript
使用javascript函数编写简单银行取钱存钱流程
May 26 Javascript
Vue axios设置访问基础路径方法
Sep 19 Javascript
layui多图上传实现删除功能的例子
Sep 23 Javascript
vue.js的状态管理vuex中store的使用详解
Nov 08 Javascript
解决vue项目中遇到 Cannot find module ‘chalk‘ 报错的问题
Nov 05 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
一个用php3编写的简单计数器
2006/10/09 PHP
Apache 配置详解(最好的APACHE配置教程)
2010/07/04 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
基于laravel Request的所有方法详解
2019/09/29 PHP
jQuery 操作option的实现代码
2011/03/03 Javascript
js判断FCKeditor内容是否为空的两种形式
2013/05/14 Javascript
JQuery对ASP.NET MVC数据进行更新删除
2016/07/13 Javascript
详解Jquery 遍历数组之$().each方法与$.each()方法介绍
2017/01/09 Javascript
深究AngularJS之ui-router详解
2017/06/13 Javascript
JavaScript中关于class的调用方法
2017/11/28 Javascript
利用Javascript获取选择文本所在的句子详解
2017/12/03 Javascript
mongoose更新对象的两种方法示例比较
2017/12/19 Javascript
深入理解ES6中let和闭包
2018/02/22 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
jQuery实现全选按钮
2021/01/01 jQuery
[02:56]《DAC最前线》之国外战队抵达上海备战亚洲邀请赛
2015/01/28 DOTA
寻找网站后台地址的python脚本
2014/09/01 Python
使用python的pandas库读取csv文件保存至mysql数据库
2018/08/20 Python
用Python编写一个高效的端口扫描器的方法
2018/12/20 Python
PyQt5+requests实现车票查询工具
2019/01/21 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
屏蔽Django admin界面添加按钮的操作
2020/03/11 Python
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
请说出几个常用的异常类
2013/01/08 面试题
幼师自荐信
2013/10/26 职场文书
物流创业计划书
2014/02/01 职场文书
抄作业检讨书
2014/02/17 职场文书
英文请假条
2014/04/11 职场文书
门店业绩提升方案
2014/06/08 职场文书
产品委托授权书范本
2014/09/16 职场文书
英语四级考试作弊检讨书
2014/09/29 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
小学英语新课改心得体会
2016/01/22 职场文书
golang日志包logger的用法详解
2021/05/05 Golang
python三子棋游戏
2022/05/04 Python