原生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 onload、ready概念介绍及使用方法
Apr 27 Javascript
自己实现ajax封装示例分享
Apr 01 Javascript
详解JavaScript中的4种类型识别方法
Sep 14 Javascript
每天一篇javascript学习小结(String对象)
Nov 18 Javascript
深入浅析AngularJS和DataModel
Feb 16 Javascript
AngularJS入门教程之表单校验用法示例
Nov 02 Javascript
详解JavaScript树结构
Jan 09 Javascript
初学者AngularJS的环境搭建过程
Oct 27 Javascript
Vue.js中的computed工作原理
Mar 22 Javascript
Vue实现双向绑定的原理以及响应式数据的方法
Jul 02 Javascript
JavaScript实现飞舞的泡泡效果
Feb 07 Javascript
微信小程序实现选择地址省市区三级联动
Jun 21 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
一个图形显示IP的PHP程序代码
2007/10/19 PHP
PHP下escape解码函数的实现方法
2010/08/08 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
2015/10/08 PHP
php快速排序原理与实现方法分析
2016/05/26 PHP
PHP对象链式操作实现原理分析
2016/10/09 PHP
thinkPHP5框架实现基于ajax的分页功能示例
2018/06/12 PHP
thinkPHP框架实现多表查询的方法
2018/06/14 PHP
PHP中使用CURL发送get/post请求上传图片批处理功能
2018/10/15 PHP
Javascript的常规数组和关联数组对比小结
2012/05/24 Javascript
js使用eval解析json实例与注意事项分享
2014/01/18 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
jQuery实现可编辑的表格实例讲解(2)
2015/09/17 Javascript
jQuery实现放大镜效果实例代码
2016/03/17 Javascript
网页中JS函数自动执行常用三种方法
2016/03/30 Javascript
详解微信小程序开发之——wx.showToast(OBJECT)的使用
2017/01/18 Javascript
微信小程序搜索组件wxSearch实例详解
2017/06/08 Javascript
Bootstrap Table 搜索框和查询功能
2017/11/30 Javascript
使用Vue实现图片上传的三种方式
2018/07/17 Javascript
详解vuex的简单todolist例子
2019/07/14 Javascript
微信小程序实现页面分享onShareAppMessage
2019/08/12 Javascript
原生js实现俄罗斯方块
2020/10/20 Javascript
Tensorflow 利用tf.contrib.learn建立输入函数的方法
2018/02/08 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
python 使用while写猜年龄小游戏过程解析
2019/10/07 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python关于调用函数外的变量实例
2019/12/26 Python
详解Python直接赋值,深拷贝和浅拷贝
2020/07/09 Python
新加坡最佳婴儿用品店:Mamahood.com.sg
2018/08/26 全球购物
Europcar美国/加拿大:预订汽车或卡车租赁服务
2018/11/13 全球购物
新大陆软件面试题
2016/11/24 面试题
银行员工职业规划范文
2014/01/21 职场文书
医院总经理岗位职责
2014/02/04 职场文书
火车来了教学反思
2014/02/11 职场文书
明信片寄语大全
2014/04/08 职场文书
个人收入证明范本
2015/06/12 职场文书
奥特曼十大神器:奥特手镯在榜,第一是贝利亚的神器
2022/03/18 日漫