原生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 国际象棋棋盘 实现代码
Jun 26 Javascript
javascript中最常用的继承模式 组合继承
Aug 12 Javascript
元素的内联事件处理函数的特殊作用域在各浏览器中存在差异
Jan 12 Javascript
extjs ColumnChart设置不同的颜色实现代码
May 17 Javascript
解析Jquery的LigerUI如何实现文件上传
Jul 09 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
Aug 27 Javascript
jQuery Easyui学习之datagrid 动态添加、移除editor
Jan 27 Javascript
Javascript使用function创建类的两种方法(推荐)
Nov 19 Javascript
vue-cli脚手架搭建的项目去除eslint验证的方法
Sep 29 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 Javascript
vue项目打包之开发环境和部署环境的实现
Apr 23 Javascript
js实现简单商品筛选功能
Feb 02 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利用新浪接口查询ip获取地理位置示例
2014/01/20 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
Js 回车换行处理的办法及replace方法应用
2013/01/24 Javascript
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
js解决弹窗问题实现班级跳转DIV示例
2014/01/06 Javascript
JS实现下拉菜单赋值到文本框的方法
2015/08/18 Javascript
jQuery获取单击节点对象的方法
2016/06/02 Javascript
JavaScript String(字符串)对象的简单实例(推荐)
2016/08/31 Javascript
完美解决js传递参数中加号和&号自动改变的方法
2016/10/11 Javascript
TypeScript学习之强制类型的转换
2016/12/27 Javascript
3种vue组件的书写形式
2017/11/29 Javascript
浅谈React的最大亮点之虚拟DOM
2018/05/29 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
validform表单验证的实现方法
2019/03/08 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
javascript中undefined的本质解析
2019/07/31 Javascript
javascript实现超好看的3D烟花特效
2020/01/01 Javascript
js实现简单的秒表
2020/01/16 Javascript
JS call()及apply()方法使用实例汇总
2020/07/11 Javascript
python通过百度地图API获取某地址的经纬度详解
2018/01/28 Python
pandas.dataframe中根据条件获取元素所在的位置方法(索引)
2018/06/07 Python
numpy数组之存取文件的实现示例
2019/05/24 Python
解决Tensorflow 使用时cpu编译不支持警告的问题
2020/02/03 Python
TensorBoard 计算图的可视化实现
2020/02/15 Python
在jupyter notebook中调用.ipynb文件方式
2020/04/14 Python
使用Keras预训练好的模型进行目标类别预测详解
2020/06/27 Python
美国女性卫生用品公司:Thinx
2017/06/30 全球购物
美国定制钻石订婚戒指:Ritani
2017/12/08 全球购物
小学生志愿者活动方案
2014/08/23 职场文书
贷款担保书
2015/01/20 职场文书
办公室主任岗位职责
2015/01/31 职场文书
2015年清明节活动总结
2015/02/09 职场文书
2019旅游导游工作总结
2019/06/27 职场文书
学生早退检讨书(范文)
2019/08/19 职场文书
MySQL中的隐藏列的具体查看
2021/09/04 MySQL