Une boucle for peut-elle incrémenter / décrémenter de plus d'un?


119

Existe-t-il d'autres moyens d'incrémenter une forboucle en Javascript en plus i++et ++i? Par exemple, je veux incrémenter de 3 au lieu d'un.

for (var i = 0; i < myVar.length; i+3) {
   //every three
}

4
Ne pouvez-vous pas simplement remplacer i = i + 3 pour le troisième argument? Ou est-ce uniquement en Java?
CptJesus

1
Oui, c'est très bien i++et ++ic'est comme i+=1si utilisé dans la déclaration de la boucle for, i+=3cela fonctionnerait.
elclanrs

1
Une forboucle n'incrémente rien. Votre code utilisé dans la fordéclaration le fait. C'est entièrement à vous de décider comment / si / où / quand vous voulez modifier iou toute autre variable d'ailleurs.
Je déteste paresseux

2
Ce n'est pas une boucle for, c'est une boucle infinie. Tu veux dire i+=3.
ninjagecko

2
Je comprends que c'est une question simple avec une solution simple, mais quelle est la raison des votes négatifs? Je suis presque sûr que ce n'est pas un doublon.
brentonstrine

Réponses:


253

Utilisez l' += opérateur d'affectation :

for (var i = 0; i < myVar.length; i += 3) {

Techniquement, vous pouvez placer toute expression de votre choix dans l'expression finale de la boucle for, mais elle est généralement utilisée pour mettre à jour la variable de compteur.

Pour plus d'informations sur chaque étape de la boucle for, consultez l'article MDN .


Merci pour les détails - j'étais à peu près sûr qu'il y avait un moyen de mettre des expressions plus avancées dans le troisième emplacement - j'avais juste oublié qu'il fallait définir la variable, donc évidemment i+3ne fonctionne pas.
brentonstrine

@brentonstrine: Pas de problème, heureux de pouvoir aider
Andrew Whitaker

Quelle est la cause de la boucle sans fin quand nous le faisons i+3?
Sanjay Shr

1
@SanjayShr i+3ne change pas la valeur dei
Nahid

@Nahid Oui, j'ai commenté ma réponse. Thanx
Sanjay Shr

13

Une forboucle:

for(INIT; TEST; ADVANCE) {
    BODY
}

Signifie ce qui suit:

INIT;
while (true) {
    if (!TEST)
        break;
    BODY;
    ADVANCE;
}

Vous pouvez écrire presque toute expression INIT, TEST, ADVANCEet BODY.

Notez que les ++opérateurs et les variantes sont des opérateurs avec des effets secondaires (il faut essayer de les éviter si vous ne les utilisez pas comme i+=1et autres):

  • ++i veux dire i+=1; return i
  • i++ veux dire oldI=i; i+=1; return oldI

Exemple:

> i=0
> [i++, i, ++i, i, i--, i, --i, i]
[0, 1, 2, 2, 2, 1, 0, 0]

8
for (var i = 0; i < 10; i = i + 2) {
    // code here
}​

ou for (var i = 0; i < 10; i+=2), parce que i=i+2est égal ài+=2
arximughal

5

La réponse d'Andrew Whitaker est vraie, mais vous pouvez utiliser n'importe quelle expression pour n'importe quelle partie.
N'oubliez pas que la deuxième expression (du milieu) doit être évaluée pour pouvoir être comparée à un booléen trueou false.

Quand j'utilise une forboucle , je la considère comme

for (var i = 0; i < 10; ++i) {
    /* expression */
}

comme étant

var i = 0;
while( i < 10 ) {
    /* expression */
    ++i;
}

1

Vous pouvez certainement. D'autres ont souligné à juste titre que vous devez le faire i += 3. Vous ne pouvez pas faire ce que vous avez publié parce que tout ce que vous faites ici est d'ajouter i + 3mais jamais de réattribuer le résultat i. i++est juste un raccourci pour i = i + 1, de même i +=3est un raccourci pour i = i + 3.


1
for (var i = 0; i < myVar.length; i+=3) {
   //every three
}

Additionnel

Operator   Example    Same As
  ++       X ++        x = x + 1
  --       X --        x = x - 1
  +=       x += y      x = x + y
  -=       x -= y      x = x - y
  *=       x *= y      x = x * y
  /=       x /= y      x = x / y
  %=       x %= y      x = x % y

-1

La dernière partie de l'opérateur ternaire vous permet de spécifier la taille du pas d'incrémentation. Par exemple, i ++ signifie incrémenter de 1. i + = 2 équivaut à i = i + 2, ... etc. Exemple:

let val= [];

for (let i = 0; i < 9; i+=2) {
  val = val + i+",";
}


console.log(val);

Résultats attendus: "2,4,6,8"

«i» peut être n'importe quel nombre à virgule flottante ou entier selon la taille de pas souhaitée.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.