Comment faire une boucle à travers array en jQuery?

j'essaie de boucler un tableau. J'ai le code suivant:

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

essaie de récupérer toutes les données du tableau. Peut quelqu'un me conduire dans le droit chemin s'il vous plaît?

175
demandé sur John Slegers 2010-10-15 19:04:10

7 réponses


(mise à jour: mon autre réponse ici expose les options non-jQuery beaucoup plus en détail. La troisième option ci-dessous, jQuery.each , n'y est pas.)


Trois options:

boucle Générique:

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

avantages : Simple, Pas de dépendance à jQuery, facile à comprendre, pas de problèmes avec préserver la signification de this dans le corps de la boucle, pas de frais généraux inutiles des appels de fonction (par exemple, dans théorie plus rapide, bien qu'en fait, vous auriez à avoir tant d'éléments que les chances sont que vous auriez d'autres problèmes; détails ).

ES5 forEach :

à partir de ECMAScript5, les tableaux ont une fonction forEach sur eux qui le rend facile à Boucler à travers le tableau:

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

lien vers docs

(Note: Il y a beaucoup d'autres fonctions, pas seulement forEach ; voir la réponse référencée ci-dessus pour plus de détails.)

avantages : déclaratif, peut utiliser une fonction pré-construite pour l'itérateur si vous en avez une pratique, si votre corps de boucle est complexe la portée d'un appel de fonction est parfois utile, pas besoin d'une variable i dans votre containing scope.

inconvénients : tous les navigateurs ne l'ont pas encore, bien que la plupart le fassent, et vous pouvez toujours utiliser un shim ES5 (une recherche en énumérera plusieurs) pour fournir sur les navigateurs qui ne l'ont pas encore. Si vous utilisez this dans le code contenant, Vous devez le coller dans une variable de sorte que vous pouvez l'utiliser dans la fonction ou passer comme un deuxième argument à forEach , puisque dans la fonction d'itération, this sera undefined (en mode strict) ou l'objet global ( window ) en mode non-strict à moins que vous donniez forEach une valeur spécifique pour lui.

jQuery.chacun:

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

( lien vers docs )

avantages : tous les mêmes avantages que forEach , plus vous savez qu'il est là depuis que vous utilisez jQuery.

inconvénients : si vous utilisez this dans le code contenant, Vous devez le coller dans une variable de sorte que vous pouvez l'utiliser dans la fonction, puisque this signifie quelque chose d'autre dans la fonction.

vous pouvez éviter la chose this cependant, en utilisant soit $.proxy :

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

...ou Function#bind :

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

...ou dans ES2015 ("ES6"), une fonction de flèche:

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

Ce PAS to:

Ne pas utiliser for..in (ou si vous le faites, le faire avec des garanties appropriées). Vous verrez des gens dire à( en fait, brièvement il y avait une réponse ici disant que), mais for..in ne fait pas ce que beaucoup de gens pensent qu'il fait (il fait quelque chose d'encore plus utile!). Plus précisément, for..in boucles à travers les noms de propriétés énumérables d'un objet (pas les index d'un tableau). Puisque les tableaux sont des objets, et que leurs seules propriétés énumérables par défaut sont les index, il semble surtout que cela fonctionne dans un déploiement fade. Mais ce n'est pas une hypothèse sûre que vous pouvez simplement utiliser pour qui. Voici une exploration: http://jsbin.com/exohi/3

je devrais adoucir le" NE PAS " ci-dessus. Si vous avez affaire à sparse les tableaux (par exemple, le tableau a 15 éléments au total, mais leurs index sont éparpillés à travers la gamme 0 à 150.000 pour une raison quelconque, et donc le length est 150,001), et si vous utilisez des sauvegardes appropriées comme hasOwnProperty et en vérifiant le nom de la propriété est vraiment numérique (voir le lien ci-dessus), for..in peut être un moyen parfaitement raisonnable d'éviter beaucoup de boucles inutiles, puisque seuls les index peuplés seront énumérés.

415
répondu T.J. Crowder 2017-05-23 12:02:37

jQuery.chaque ()

jQuery.chaque ()

jQuery.each(array, callback)

itération du réseau

jQuery.each(array, function(Integer index, Object value){});

itération d'objet

jQuery.each(object, function(string propertyName, object propertyValue){});

exemple :

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>

boucles javascript pour les tableaux

pour boucle

for (initialExpression; condition; incrementExpression)
  statement

exemple

var substr = [1, 2, 3, 4];

//loop from 0 index to max index
for(var i = 0; i < substr.length; i++) {
  console.log("loop", substr[i])
}

//reverse loop
for(var i = substr.length-1; i >= 0; i--) {
  console.log("reverse", substr[i])
}

//step loop
for(var i = 0; i < substr.length; i+=2) {
  console.log("step", substr[i])
}

dans

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

pour

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

forEach

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

ressources

MDN boucles et itérateurs

54
répondu skyfoot 2018-05-30 12:05:32

Pas besoin de jquery ici, juste un for boucle œuvres:

var substr = currnt_image_list.split(',');
for(var i=0; i< substr.length; i++) {
  alert(substr[i]);
}
19
répondu Nick Craver 2010-10-15 15:07:39

Option 1: le traditionnel for -boucle

Les bases

traditionnel for -boucle a trois composantes :

  1. l'initialisation: exécutée avant que le bloc look soit exécuté la première fois
  2. la condition : vérifie une condition chaque fois avant que le bloc de boucle soit exécuté, et quitte la boucle si faux
  3. l'après-coup : effectué chaque fois que la boucle de bloc est exécuté

ces trois composants sont séparés les uns des autres par un symbole ; . Le contenu de chacun de ces trois composants est optionnel, ce qui signifie que la boucle la plus minimale est la boucle for :"

for (;;) {
    // Do stuff
}

bien sûr, vous aurez besoin pour inclure un if(condition === true) { break; } ou un if(condition === true) { return; } quelque part à l'intérieur de ce for - boucle pour l'obtenir pour arrêter de fonctionner.

Habituellement, cependant, l'initialisation est utilisé pour déclarer un index, la condition est utilisé pour comparer l'indice avec une valeur minimale ou maximale, et le coup est utilisé pour incrémenter l'index :

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

for - boucle à boucle par un réseau

la façon traditionnelle de boucler à travers un réseau, est celle-ci :

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

Ou, si vous préférez boucle vers l'arrière, vous faites cela :

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

il existe, cependant, de nombreuses variantes possibles, comme par exemple: celui-ci :

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

... ou bien celle-ci ...

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

... ou celui-ci :

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

celui qui fonctionne le mieux est en grande partie une question de goût personnel et le cas d'utilisation spécifique que vous mettez en œuvre.

Note:

chacune de ces variantes est prise en charge par tous les navigateurs, y compris les anciens véry!


Option 2: while - boucle

une alternative à une boucle for est une boucle while . Pour parcourir un tableau, vous pouvez le faire :

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

comme le traditionnel for - loops, while - loops sont pris en charge par même le plus ancien des navigateurs.

aussi, chaque boucle while peut être réécrite comme une boucle for . Par exemple, la boucle while ci-dessus se comporte exactement de la même manière que cette boucle for :

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

Option 3: for...in et for...of

en JavaScript, vous pouvez aussi faire ceci:

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

cela doit être utilisé avec prudence, cependant, car il ne se comporte pas comme une boucle for traditionnelle dans tous les cas, et il ya des effets secondaires potentiels qui doivent être considérés. Voir Pourquoi utiliser "for...in" avec une itération de tableau est une mauvaise idée? pour plus de détails.

comme alternative à for...in , il y a maintenant aussi pour for...of . L'exemple suivant montre la différence entre une boucle for...of et une boucle 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
}
Note:

vous devez également considérer qu'aucune version D'Internet Explorer prend en charge for...of ( bord 12+ does) et que for...in nécessite au moins IE10.


Option 4 : Array.prototype.forEach()

une alternative à For - loops est Array.prototype.forEach() , qui utilise la syntaxe suivante:

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

Array.prototype.forEach() est supporté par tous navigateurs modernes, ainsi que IE9+.


Option 5 : jQuery.each()

en plus des quatre autres options mentionnées, jQuery avait aussi sa propre variation foreach .

il utilise la syntaxe suivante:

$.each(myArray, function(key, value) {
    console.log(value);
});
17
répondu John Slegers 2017-05-23 11:47:14

utiliser la fonction each() de jQuery.

voici un exemple:

$.each(currnt_image_list.split(','), function(index, value) { 
  alert(index + ': ' + value); 
});
15
répondu romaintaz 2010-10-15 15:06:55

utilisez Jquery chacun. Il y a d'autres façons, mais chacune est conçue à cette fin.

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

Et ne mettez pas de virgule après le dernier numéro.

5
répondu MItrajyoti Kusari 2015-02-20 10:30:24

vous pouvez utiliser une for boucle:

var things = currnt_image_list.split(','); 
for(var i = 0; i < things.length; i++) {
    //Do things with things[i]
}
2
répondu SLaks 2010-10-15 15:07:23