How to loop through array in jQuery?
I am trying to loop through an array. I have the following code:
var substr = currnt_image_list.split(','); //This will split up 21,32,234,223,
Am trying to get all the data out of the array. Can some one lead me in the right path please?
(Update: My other answer here lays out the non-jQuery options much more thoroughly. The third option below, jQuery.each
, isn't in it though.)
Three options:
Generic loop:
var i;
for (i = 0; i < substr.length; ++i) {
// do something with `substr[i]`
}
Advantages : Straight-forward, no dependency on jQuery, easy to understand, no issues with preserving the meaning of this
within the body of the loop, no unnecessary overhead of function calls (eg, in theory faster, though in fact you'd have to have so many elements that the odds are you'd have other problems; details).
ES5's forEach
:
As of ECMAScript5, arrays have a forEach
function on them which makes it easy to loop through the array:
substr.forEach(function(item) {
// do something with `item`
});
Link to docs
(Note: There are lots of other functions, not just forEach
; see the answer referenced above for details.)
Advantages : Declarative, can use a prebuilt function for the iterator if you have one handy, if your loop body is complex the scoping of a function call is sometimes useful, no need for an i
variable in your containing scope.
Disadvantages : Not all browsers have it yet, although most do, and you can always use an ES5 shim (a search will list several) to provide it on browsers that don't have it yet. If you're using this
in the containing code, you have to stick it in a variable so you can use it within the function or pass it as a second argument to forEach
, since within the iteration function, this
will be undefined
(in strict mode) or the global object ( window
) in non-strict mode unless you give forEach
a specific value for it.
jQuery.each:
jQuery.each(substr, function(index, item) {
// do something with `item` (or `this` is also `item` if you like)
});
(Link to docs)
Advantages : All of the same advantages as forEach
, plus you know it's there since you're using jQuery.
Disadvantages : If you're using this
in the containing code, you have to stick it in a variable so you can use it within the function, since this
means something else within the function.
You can avoid the this
thing though, by either using $.proxy
:
jQuery.each(substr, $.proxy(function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}, this));
...or Function#bind
:
jQuery.each(substr, function(index, item) {
// do something with `item` (`this` is the same as it was outside)
}.bind(this));
...or in ES2015 ("ES6"), an arrow function:
jQuery.each(substr, (index, item) => {
// do something with `item` (`this` is the same as it was outside)
});
What NOT to do:
Don't use for..in
for this (or if you do, do it with proper safeguards). You'll see people saying to (in fact, briefly there was an answer here saying that), but for..in
does not do what many people think it does (it does something even more useful!). Specifically, for..in
loops through the enumerable property names of an object (not the indexes of an array). Since arrays are objects, and their only enumerable properties by default are the indexes, it mostly seems to sort of work in a bland deployment. But it's not a safe assumption that you can just use it for that. Here's an exploration: http://jsbin.com/exohi/3
I should soften the "don't" above. If you're dealing with sparse arrays (eg, the array has 15 elements in total but their indexes are strewn across the range 0 to 150,000 for some reason, and so the length
is 150,001), and if you use appropriate safeguards like hasOwnProperty
and checking the property name is really numeric (see link above), for..in
can be a perfectly reasonable way to avoid lots of unnecessary loops, since only the populated indexes will be enumerated.
jQuery.each()
jQuery.each()
jQuery.each(array, callback)
array iteration
jQuery.each(array, function(Integer index, Object value){});
object iteration
jQuery.each(object, function(string propertyName, object propertyValue){});
example:
var substr = [1, 2, 3, 4];
$.each(substr , function(index, val) {
console.log(index, val)
});
var myObj = { firstName: "skyfoot"};
$.each(myObj, function(propName, propVal) {
console.log(propName, propVal);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
这里不需要jquery只是for
循环的工作:
var substr = currnt_image_list.split(',');
for(var i=0; i< substr.length; i++) {
alert(substr[i]);
}
链接地址: http://www.djcxy.com/p/4204.html
上一篇: 如何获取Android设备的主要e
下一篇: 如何在jQuery中循环数组?