依星源码资源网,依星资源网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 122|回复: 0

[html]for 循环,jQuery循环遍历详解

[复制链接] 主动推送

6940

主题

6992

帖子

7235

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
7235
发表于 2024-1-8 14:31:15 | 显示全部楼层 |阅读模式
1.for 循环
原生JS最基本的使用:
  1. for (var i=0;i<cars.length;i++)
  2. {
  3.     .....
  4. }
复制代码
for - 循环代码块一定的次数
2.for in
for/in - 循环遍历对象的属性
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行
  1. var obj = {a:1, b:2, c:3};
  2.    
  3. for (var prop in obj) {
  4.   console.log("obj." + prop + " = " + obj[prop]);

  5. // for (variable in object) {...}
  6. // variable
  7. // 在每次迭代时,将不同的属性名分配给变量。
  8. // object
  9. // 被迭代其枚举属性的对象。
复制代码
for…in 不应该被用来迭代一个下标顺序很重要的 Array .
  1. let array2 = ['a','b','c']
  2. let obj1 = {
  3.   name : 'lei',
  4.   age : '16'
  5. }

  6. for(variable  in array2){   //variable  为 index
  7.   console.log(variable )   //0 1 2
  8. }

  9. for(variable  in obj1){   //variable 为属性名
  10.   console.log(variable)   //name age
  11. }
复制代码
3.forEach()和map()
JavaScript 提供了 foreach() map() 两个可遍历 Array对象 的方法 forEach和map用法类似,都可以遍历到数组的每个元素,而且参数一致;
forEach() 方法对数组的每个元素执行一次提供的函数。
  1. let a = ['a', 'b', 'c'];
  2. a.forEach(function(element) {
  3.     console.log(element);
  4. });
复制代码
  1. array.forEach(callback(currentValue, index, array){
  2.     //do something
  3. }, this)

  4. array.forEach(callback[, thisArg])
复制代码
参数:
callback为数组中每个元素执行的函数,该函数接收三个参数:
currentValue(当前值)
数组中正在处理的当前元素。
index(索引)
数组中正在处理的当前元素的索引。
array
forEach()方法正在操作的数组。
thisArg可选可选参数。当执行回调 函数时用作this的值(参考对象)。
forEach 遍历的范围在第一次调用 callback 前就会确定。调用forEach 后添加到数组中的项不会被 callback 访问到
两者的不同点:
不同点:
forEach() 方法对数组的每个元素执行一次提供的函数。总是返回undefined;
map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。返回值是一个新的数组;
  1. var array1 = [1,2,3,4,5];

  2. var x = array1.forEach(function(value,index){

  3.     console.log(value);   //可遍历到所有数组元素

  4.     return value + 10
  5. });
  6. console.log(x);   //undefined    无论怎样,总返回undefined

  7. var y = array1.map(function(value,index){

  8.     console.log(value);   //可遍历到所有数组元素

  9.     return value + 10
  10. });
  11. console.log(y);   //[11, 12, 13, 14, 15]   返回一个新的数组
复制代码
4.for…of
ECMAScript 6新方法
for…of 语句创建一个循环来迭代可迭代的对象。在 ES6 中引入的 for…of 循环,以替代 for…in 和 forEach() ,并支持新的迭代协议。for…of 允许你遍历 Arrays(数组), Strings(字符串), Maps(映射), Sets(集合)等可迭代的数据结构等 for…of 循环仅适用于迭代。 而普通对象不可迭代
  1. let array2 = ['a','b','c']
  2. let obj1 = {
  3.   name : 'lei',
  4.   age : '16'
  5. }

  6. for(variable  of array2){   /variable  为 value
  7.   console.log(variable )   //'a','b','c'
  8. }

  9. for(variable  of obj1){  //<strong>普通对象不能这样用</strong>
  10.   console.log(variable)   // 报错 : main.js:11Uncaught TypeError: obj1[Symbol.iterator] is not a function
复制代码
总结 :
:for in总是得到对像的key或数组,字符串的下标,而for of和forEach一样,是直接得到值
结果for of不能对象用
对于新出来的Map,Set上面
for…in循环会遍历一个object所有的可枚举属性。
for…of会遍历具有iterator接口的数据结构
如果是数组循环:
原始的for循环比较麻烦,forEach,这种写法的问题在于,无法中途跳出forEach循环,break命令或return命令都不能奏效。
for…in数组循环有几个缺点:
数组的键名是数字,但是for…in循环是以字符串作为键名“0”、“1”、“2”等等。
for…in循环不仅遍历数字键名,还会遍历手动添加的其他键,甚至包括原型链上的键。
某些情况下,for…in循环会以任意顺序遍历键名。
总之,for…in循环主要是为遍历对象而设计的,不适用于遍历数组
for…of循环相比上面几种做法,有一些显著的优点:
有着同for…in一样的简洁语法,但是没有for…in那些缺点。
不同于forEach方法,它可以与break、continue和return配合使用。
提供了遍历所有数据结构的统一操作接口。
如果是循环对象,用for in
jquery 循环的用法
jQuery的each方法的几种常用的用法
  1. var arr = [ "one", "two", "three", "four"];     
  2. $.each(arr, function(){     
  3.     alert(this);     
  4. });
复制代码
//上面这个each输出的结果分别为:one,two,three,four
  1. var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]     
  2. $.each(arr1, function(i, item){     
  3.    alert(item[0]);     
  4. });   
复制代码
//其实arr1为一个二维数组,item相当于取每一个一维数组,
//item[0]相对于取每一个一维数组里的第一个值
//所以上面这个each输出分别为:1 4 7
  1. var obj = { one:1, two:2, three:3, four:4};     
  2. $.each(obj, function(key, val) {     
  3.     alert(obj[key]);           
  4. });
复制代码
//这个each就有更厉害了,能循环每一个属性
//输出结果为:1 2 3 4
jQuery更适用的遍历方法
1)先获取某个集合对象
2)遍历集合对象的每一个元素
var d=$(“div”);
$.each(d,function (index,domEle){
d是要遍历的集合
index就是索引值
domEle 表示获取遍历每一个dom对
});
  1. $(function(){
  2.         var con=[
  3.             {
  4.                 "image1":"img/1524880084962.jpg",
  5.                 "shopName":"黑花生(100g*15袋/盒)",
  6.                 "price":190,
  7.                 "markPrice":200
  8.             },
  9.             {
  10.                 "image1":"img/1524879960117.jpg",
  11.                 "shopName":"黑花生(100g*15袋/盒)",
  12.                 "price":190,
  13.                 "markPrice":200
  14.             },
  15.             {
  16.                 "image1":"img/1524879605807.jpg",
  17.                 "shopName":"黑花生(100g*15袋/盒)",
  18.                 "price":190,
  19.                 "markPrice":200
  20.             },
  21.             {
  22.                 "image1":"img/1524879181488.jpg",
  23.                 "shopName":"黑花生(100g*15袋/盒)",
  24.                 "price":190,
  25.                 "markPrice":200
  26.             }
  27.             
  28.         ]
  29.         var html="";
  30.         $.each(con, function(k,v) {//这里的函数参数是键值对的形式,k代表键名,v代表值
  31.             html+='<li class="shopBox">'+
  32.                     '<div class="shopImg"><img src='+con[k].image1+'/></div>'+
  33.                     '<div class="shopListName">'+con[k].shopName+'</div>'+
  34.                     '<div class="shopPrice">'+
  35.                         '<span class="price">¥'+con[k].price+'</span>'+
  36.                         '<span class="marketPrice">¥'+con[k].markPrice+'</span>'+
  37.                     '</div>'+
  38.                 '</li>'
  39.         });
  40.         $(".shop_box").append(html);
  41.     })
复制代码
注意如果是后台返回的是Json字符串请一定要转换一下:
  1. //data是后台传过来的字符串
  2.   $.each(JSON.parse(data), function (index, obj) {    //使用JSON.parse转换为JavaScript对象。 要不控制台报错  index是下标  obj是内容 如果是对象的话就 obj.(名称就可以)
  3.   alert(index);
  4. });  
复制代码
如果不使用JSON.parse()来转换  会报   Uncaught TypeError: Cannot use 'in' operator to search for '156'   错误

扫码关注微信公众号,及时获取最新资源信息!下载附件优惠VIP会员5折;永久VIP免费
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

免责声明:
1、本站提供的所有资源仅供参考学习使用,版权归原著所有,禁止下载本站资源参与商业和非法行为,请在24小时之内自行删除!
2、本站所有内容均由互联网收集整理、网友上传,并且以计算机技术研究交流为目的,仅供大家参考、学习,请勿任何商业目的与商业用途。
3、若您需要商业运营或用于其他商业活动,请您购买正版授权并合法使用。
4、论坛的所有内容都不保证其准确性,完整性,有效性。阅读本站内容因误导等因素而造成的损失本站不承担连带责任。
5、用户使用本网站必须遵守适用的法律法规,对于用户违法使用本站非法运营而引起的一切责任,由用户自行承担
6、本站所有资源来自互联网转载,版权归原著所有,用户访问和使用本站的条件是必须接受本站“免责声明”,如果不遵守,请勿访问或使用本网站
7、本站使用者因为违反本声明的规定而触犯中华人民共和国法律的,一切后果自己负责,本站不承担任何责任。
8、凡以任何方式登陆本网站或直接、间接使用本网站资料者,视为自愿接受本网站声明的约束。
9、本站以《2013 中华人民共和国计算机软件保护条例》第二章 “软件著作权” 第十七条为原则:为了学习和研究软件内含的设计思想和原理,通过安装、显示、传输或者存储软件等方式使用软件的,可以不经软件著作权人许可,不向其支付报酬。若有学员需要商用本站资源,请务必联系版权方购买正版授权!
10、本网站如无意中侵犯了某个企业或个人的知识产权,请来信【站长信箱312337667@qq.com】告之,本站将立即删除。
郑重声明:
本站所有资源仅供用户本地电脑学习源代码的内含设计思想和原理,禁止任何其他用途!
本站所有资源、教程来自互联网转载,仅供学习交流,不得商业运营资源,不确保资源完整性,图片和资源仅供参考,不提供任何技术服务。
本站资源仅供本地编辑研究学习参考,禁止未经资源商正版授权参与任何商业行为,违法行为!如需商业请购买各资源商正版授权
本站仅收集资源,提供用户自学研究使用,本站不存在私自接受协助用户架设游戏或资源,非法运营资源行为。
 
在线客服
点击这里给我发消息 点击这里给我发消息 点击这里给我发消息
售前咨询热线
312337667

微信扫一扫,私享最新原创实用干货

QQ|免责声明|依星源码资源网 ( 鲁ICP备2021043233号-3 )|网站地图

GMT+8, 2024-5-15 16:54

Powered by Net188.com X3.4

邮箱:312337667@qq.com 客服QQ:312337667(工作时间:9:00~21:00)

快速回复 返回顶部 返回列表