[转发]for 循环,jQuery循环遍历详解

摘要:
forEach遍历的范围在第一次调用callback前就会确定。返回值是一个新的数组;vararray1=[1,2,3,4,5];varx=array1.forEach;console.log;//undefined无论怎样,总返回undefinedvary=array1.map;console.log;//[11,12,13,14,15]返回一个新的数组4.for…of循环,以替代for…in和forEach(),并支持新的迭代协议。某些情况下,for…in循环主要是为遍历对象而设计的,不适用于遍历数组for…不同于forEach方法,它可以与break、continue和return配合使用。

1.for 循环
原生JS最基本的使用:

for (var i=0;i<cars.length;i++)
{
    .....
}

for - 循环代码块一定的次数
2.for in
for/in - 循环遍历对象的属性
以任意顺序遍历一个对象的可枚举属性。对于每个不同的属性,语句都会被执行

var obj = {a:1, b:2, c:3};
for (var prop inobj) {
  console.log("obj." + prop + " = " +obj[prop]);
//for (variable in object) {...}
//variable
//在每次迭代时,将不同的属性名分配给变量。
//object
//被迭代其枚举属性的对象。

for…in 不应该被用来迭代一个下标顺序很重要的 Array .

let array2 = ['a','b','c']
let obj1 ={
  name : 'lei',
  age : '16'
}
for(variable  in array2){   //variable  为 index
  console.log(variable )   //0 1 2
}
for(variable  in obj1){   //variable 为属性名
  console.log(variable)   //name age
}

3.forEach()和map()
JavaScript 提供了 foreach() map() 两个可遍历 Array对象 的方法 forEach和map用法类似,都可以遍历到数组的每个元素,而且参数一致;
forEach() 方法对数组的每个元素执行一次提供的函数。

let a = ['a', 'b', 'c'];
a.forEach(function(element) {
    console.log(element);
});
array.forEach(callback(currentValue, index, array){
    //do something
}, this)
array.forEach(callback[, thisArg])

参数:

callback为数组中每个元素执行的函数,该函数接收三个参数:

currentValue(当前值)
数组中正在处理的当前元素。
index(索引)
数组中正在处理的当前元素的索引。
array
forEach()方法正在操作的数组。
thisArg可选可选参数。当执行回调 函数时用作this的值(参考对象)。
forEach 遍历的范围在第一次调用 callback 前就会确定。调用forEach 后添加到数组中的项不会被 callback 访问到

两者的不同点:
不同点:

forEach() 方法对数组的每个元素执行一次提供的函数。总是返回undefined;

map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。返回值是一个新的数组;

var array1 = [1,2,3,4,5];
var x = array1.forEach(function(value,index){
    console.log(value);   //可遍历到所有数组元素
    return value + 10
});
console.log(x);   //undefined    无论怎样,总返回undefined
var y = array1.map(function(value,index){
    console.log(value);   //可遍历到所有数组元素
    return value + 10
});
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 循环仅适用于迭代。 而普通对象不可迭代

let array2 = ['a','b','c']
let obj1 ={
  name : 'lei',
  age : '16'
}
for(variable  of array2){   /variable  为 value
  console.log(variable )   //'a','b','c'
}
for(variable  of obj1){  //<strong>普通对象不能这样用</strong>
  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方法的几种常用的用法

 var arr = [ "one", "two", "three", "four"];     
 $.each(arr, function(){     
    alert(this);     
 }); 

//上面这个each输出的结果分别为:one,two,three,four

var arr1 = [[1, 4, 3], [4, 6, 6], [7, 20, 9]]     
$.each(arr1, function(i, item){     
   alert(item[0]);     
});    

//其实arr1为一个二维数组,item相当于取每一个一维数组,
//item[0]相对于取每一个一维数组里的第一个值
//所以上面这个each输出分别为:1 4 7

var obj = { one:1, two:2, three:3, four:4};     
$.each(obj, function(key, val) {     
    alert(obj[key]);           
});   

//这个each就有更厉害了,能循环每一个属性
//输出结果为:1 2 3 4

jQuery更适用的遍历方法
1)先获取某个集合对象
2)遍历集合对象的每一个元素
var d=$(“div”);
$.each(d,function (index,domEle){
d是要遍历的集合
index就是索引值
domEle 表示获取遍历每一个dom对
});

 $(function(){
  var con=[
   {
    "image1":"img/1524880084962.jpg",
    "shopName":"黑花生(100g*15袋/盒)",
    "price":190,
    "markPrice":200
   },
   {
    "image1":"img/1524879960117.jpg",
    "shopName":"黑花生(100g*15袋/盒)",
    "price":190,
    "markPrice":200
   },
   {
    "image1":"img/1524879605807.jpg",
    "shopName":"黑花生(100g*15袋/盒)",
    "price":190,
    "markPrice":200
   },
   {
    "image1":"img/1524879181488.jpg",
    "shopName":"黑花生(100g*15袋/盒)",
    "price":190,
    "markPrice":200
   }
  ]
  var html="";
  $.each(con, function(k,v) {//这里的函数参数是键值对的形式,k代表键名,v代表值
   html+='<li class="shopBox">'+
     '<div class="shopImg"><img src='http://t.zoukankan.com/+con[k].image1+'/></div>'+
     '<div class="shopListName">'+con[k].shopName+'</div>'+
     '<div class="shopPrice">'+
      '<span class="price">¥'+con[k].price+'</span>'+
      '<span class="marketPrice">¥'+con[k].markPrice+'</span>'+
     '</div>'+
    '</li>'
  });
  $(".shop_box").append(html);
 })

注意如果是后台返回的是Json字符串请一定要转换一下:

 //data是后台传过来的字符串
  $.each(JSON.parse(data), function (index, obj) {    //使用JSON.parse转换为JavaScript对象。 要不控制台报错  index是下标  obj是内容 如果是对象的话就 obj.(名称就可以)
alert(index);
 });  

如果不使用JSON.parse()来转换 会报 Uncaught TypeError: Cannot use 'in' operator to search for '156' 错误

————————————————
版权声明:本文为CSDN博主「_dalianmiao」的原创文章,遵循CC 4.0 by-sa版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/hani_wen/article/details/81878112

免责声明:文章转载自《[转发]for 循环,jQuery循环遍历详解》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇iPhone/iPad/Android UI尺寸规范如何在.NET Core Web API中获取当前用户的JWT Token下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

JQuery实现表格的相同单元格合并的三种方法

表格中相同单元格合并是经常需要用到的,针对自己做的方法做个小总结,先看一下合并前效果图, 合并后的效果图: 代码: <!DOCTYPE html><html>  <head>    <title>merge.html</title>     <meta http-equiv="keyword...

jQuery操作json数据

json是一种轻量级数据交换格式,简单的json格式为[{"key1":"value1"},{"key2":"value2"}], []代表数组,{}代表数组中的数据对象,key1,key2是一个json对象中的key,一个json中key值唯一,value1,value2,是key键对应的值。 下面使用jquery解析简单的son文件。 这里是songs...

DropDownList无刷新级联下拉(固定级联),Jquery获取JOSN数据

1.HTML页面 <td align="left">                                <asp:DropDownList ID="ddlOne" runat="server">                                </asp:DropDownList>      ...

lua for循环

《转自网络,仅供学习》 for循环是一个循环控制结构,可以有效地编写需要执行的特定次数的循环。 语法 Lua编程语言的for循环的语法是: for init,max/min value, increment do statement(s) end 下面是控制在一个循环的流程: 初始化步骤首先被执行,并且仅一次。这个步骤可让您声明和初始化任何循环控制...

jQuery boxy弹出层对话框插件中文演示及讲解

一、前言jQuery 下的boxy可以说是一个非常实用的插件,尤其在SNS社区型的大型网站上经常见到风格类似的效果,例如开心网,人人网,facebook网站。这个提示对话框插件应用非常广泛,吃透这个jQuery插件,在灵活运用Ajax技术的话,会使网站无论技术还是体验都会有很大的提升的。具体来讲此jQuery插件包括:提示、确认,拖拉、改变大小、Ajax...

webpack性能优化-code split

代码分割: 1. 可以把一个大的入口文件 分割 成 多个入口文件,实现并行加载,从而速度更快 2.可以设置成按需加载,比如单页面开发,整个页面非常庞大,所以要根据路由拆分成多个文件,实现按需加载(拆分文件需要用到webpack拆分) 在 webpack 中可以定义多入口,将不同的入口文件打包为不同的 chunk    单入口---->只引入一个...