如何在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
;详情请参考上面的答案 。)
优点 :声明式的,如果你有一个方便的话可以使用预编译的函数,如果你的循环体是复杂的,函数调用的范围有时是有用的,不需要在你的包含范围内的i
variables。
缺点 :并不是所有的浏览器都有,尽pipe大多数浏览器都这样做,而且您总是可以使用ES5填充(search会列出几个),然后在尚未安装的浏览器上提供它。 如果你在包含代码中使用它,你必须把它放在一个variables中,所以你可以在函数中使用它,或者把它作为forEach
的第二个parameter passing,因为在迭代函数中, this
variables是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包含三个组件:
- 初始化:在第一次执行look块之前执行
- 条件:在循环块执行前每次都检查一个条件,如果为false则退出循环
- 事后考虑:循环块执行后每次执行
这三个组成部分是相互分离的;
符号。 这三个组件中的每一个的内容都是可选的,这意味着以下是可能的最小循环:
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...in
和for...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] }