如何在jQuery中循环数组?

我正在试图通过一个数组循环。 我有以下代码:

var substr = currnt_image_list.split(','); //This will split up 21,32,234,223, 

我试图从数组中获取所有的数据。 有人可以带我走对吗?


(更新:我的其他答案在这里列出非jQuery选项更彻底。下面的第三个选项, jQuery.each ,但不在其中。


三个选项:

通用循环:

 var i; for (i = 0; i < substr.length; ++i) { // do something with `substr[i]` } 

优点 :简单直接,不依赖jQuery,易于理解,在循环体内保留这个意义没有任何问题,没有不必要的函数调用开销(例如理论上速度更快,但实际上你会有有这么多的元素,你有其他问题的可能性, 细节 )。

ES5的forEach

从ECMAScript5开始,数组在其上有一个forEach函数,这样就很容易遍历数组:

 substr.forEach(function(item) { // do something with `item` }); 

链接到文档

(注意:还有很多其他的function,不只是forEach ;详情请参考上面的答案 。)

优点 :声明式的,如果你有一个方便的话可以使用预编译的函数,如果你的循环体是复杂的,函数调用的范围有时是有用的,不需要在你的包含范围内的ivariables。

缺点 :并不是所有的浏览器都有,尽pipe大多数浏览器都这样做,而且您总是可以使用ES5填充(search会列出几个),然后在尚未安装的浏览器上提供它。 如果你在包含代码中使用它,你必须把它放在一个variables中,所以你可以在函数中使用它,或者把它作为forEach的第二个parameter passing,因为在迭代函数中, thisvariables是undefined模式)或非严格模式下的全局对象( window ),除非你给每个特定的值。

jQuery.each:

 jQuery.each(substr, function(index, item) { // do something with `item` (or `this` is also `item` if you like) }); 

( 链接到文档 )

优点 :与forEach相同的优点,加上你知道它在那里,因为你正在使用jQuery。

缺点 :如果你在包含代码中使用它,你必须把它放在一个variables中,所以你可以在函数中使用它,因为this意味着函数内的其他东西。

你可以通过使用$.proxy来避免this事情:

 jQuery.each(substr, $.proxy(function(index, item) { // do something with `item` (`this` is the same as it was outside) }, this)); 

…或者Function#bind

 jQuery.each(substr, function(index, item) { // do something with `item` (`this` is the same as it was outside) }.bind(this)); 

…或在ES2015(“ES6”)中,箭头function:

 jQuery.each(substr, (index, item) => { // do something with `item` (`this` is the same as it was outside) }); 

不要做什么:

不要使用for..in (或者如果你这样做,用适当的保护措施来做)。 你会看到有人说(实际上,这里简单地说有一个答案),但是for..in没有做许多人认为它做的事情(它做的更有用!)。 具体来说, for..in循环一个对象的可枚举的属性名称(而不是数组的索引)。 由于数组是对象,并且默认情况下它们唯一可枚举的属性是索引,所以它大部分似乎是在平淡的部署中进行的。 但是这不是一个安全的假设,你可以使用它。 这是一个探索: http : //jsbin.com/exohi/3

我应该软化上面的“不要”。 如果你正在处理稀疏数组(例如,数组总共有15个元素,但是由于某些原因,它们的索引散布在0到150,000的范围内,所以length是150,001), 并且如果使用适当的安全措施,如hasOwnProperty和检查属性名是真正的数字(见上面的链接), for..in可以是一个完全合理的方法来避免大量不必要的循环,因为只有被填充的索引将被枚举。

查询循环

  $.each(substr , function(i, val) { alert(substr [i]); }); 

jQuery的每一个

数组的javascript循环

for循环

 for(var i = 0; i <substr.length; i++) { console.log(substr[i]) } 

因为

 //dont really wnt to use this on arrays, use it on objects for(var i in substr) { console.log(substr[i]) } 

为的

 for(var i of subs) { //can use break; console.log(i); } 

的forEach

 substr.forEach(function(v, i, a){ //cannot use break; console.log(v, i, a); }) 

资源

MDN循环和迭代器

这里不需要jquery只是for循环的工作:

 var substr = currnt_image_list.split(','); for(var i=0; i< substr.length; i++) { alert(substr[i]); } 

选项1:传统for回旋

基础

传统的for -loop包含三个组件:

  1. 初始化:在第一次执行look块之前执行
  2. 条件:在循环块执行前每次都检查一个条件,如果为false则退出循环
  3. 事后考虑:循环块执行后每次执行

这三个组成部分是相互分离的; 符号。 这三个组件中的每一个的内容都是可选的,这意味着以下是可能的最小循环:

 for (;;) { // Do stuff } 

当然,你需要包含一个if(condition === true) { break; } if(condition === true) { break; }或者一个if(condition === true) { return; } 为了让它停止运行,在里面的某处。

通常情况下,初始化用于声明一个索引,条件用于比较该索引与最小或最大值,后续用于增加索引:

 for (var i = 0, length = 10; i < length; i++) { console.log(i); } 

使用传统for循环遍历数组

在数组中循环的传统方式是这样的:

 for (var i = 0, length = myArray.length; i < length; i++) { console.log(myArray[i]); } 

或者,如果你喜欢向后循环,你可以这样做:

 for (var i = myArray.length - 1; i > -1; i--) { console.log(myArray[i]); } 

然而,有很多可能的变化,例如。 这个 :

 for (var key = 0, value = myArray[key], var length = myArray.length; key < length; value = myArray[++key]) { console.log(value); } 

…或者这个…

 var i = 0, length = myArray.length; for (; i < length;) { console.log(myArray[i]); i++; } 

…或者这个:

 var key = 0, value; for (; value = myArray[key++];){ console.log(value); } 

无论哪个工作最好,主要是个人的品味和你正在实施的具体用例。

注意 :

所有浏览器都支持这些变体,包括旧版的!


选项2: while -loop

一个for -loop的替代方法是一个while -loop。 要循环访问数组,可以这样做:

 var key = 0; while(value = myArray[key++]){ console.log(value); } 

注意 :

就像传统的for循环”一样, while最古老的浏览器也支持“循环”。

另外,每个while循环可以被重写为for -loop。 例如,上面的while -loop的行为与这个for -loop的行为完全相同:

 for(var key = 0;value = myArray[key++];){ console.log(value); } 

选项3: for...infor...of

在JavaScript中,你也可以这样做:

 for (i in myArray) { console.log(myArray[i]); } 

然而,这应该谨慎使用,因为它在所有情况下都不具有传统的for回路”的function,而且还有潜在的副作用需要考虑。 看看为什么在数组迭代中使用“for … in”是一个坏主意? 更多细节。

作为…的替代scheme,现在还有for...of 。 以下示例显示了for...of循环与for...in循环之间的区别:

 var myArray = [3, 5, 7]; myArray.foo = "hello"; for (var i in myArray) { console.log(i); // logs 0, 1, 2, "foo" } for (var i of myArray) { console.log(i); // logs 3, 5, 7 } 

注意 :

您还需要考虑没有Internet Explorer支持的版本( Edge 12+ ),并且for...in至less需要IE 10。


选项4: Array.prototype.forEach()

For -loops的替代方法是Array.prototype.forEach() ,它使用以下语法:

 myArray.forEach(function(value, key, myArray) { console.log(value); }); 

注意 :

Array.prototype.forEach()支持所有现代浏览器,以及IE9 +。


选项5: jQuery.each()

除了提到的其他四个选项之外,jQuery也有自己的foreach变体。

它使用以下语法:

 $.each(myArray, function(key, value) { console.log(value); }); 

使用jQuery的each()函数。

这里是一个例子:

 $.each(currnt_image_list.split(','), function(index, value) { alert(index + ': ' + value); }); 

每个使用jquery。 还有其他的方法,但每个都是为此目的而devise的。

 $.each(substr, function(index, value) { alert(value); }); 

最后一个数字后面不要加逗号。

你可以使用for循环:

 var things = currnt_image_list.split(','); for(var i = 0; i < things.length; i++) { //Do things with things[i] }