Um loop for pode aumentar / diminuir em mais de um?


119

Existem outras maneiras de incrementar um forloop em Javascript além de i++e ++i? Por exemplo, quero aumentar em 3 em vez de um.

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

4
Você não pode simplesmente substituir i = i + 3 pelo terceiro argumento? Ou isso é apenas em Java?
CptJesus

1
Sim, tudo bem i++e ++isão como i+=1se fossem usados ​​na declaração de loop for, então i+=3funcionaria.
elclanrs,

1
Um forloop não incrementa nada. Seu código usado na fordeclaração sim. Depende inteiramente de você como / se / onde / quando deseja modificar iou qualquer outra variável para esse assunto.
I Hate Lazy

2
Isso não é um loop for, é um loop infinito. Você quer dizer i+=3.
ninjagecko,

2
Eu entendo que esta é uma pergunta simples com uma solução simples, mas qual é o motivo dos votos negativos? Tenho certeza de que não é uma duplicata.
brentonstrina,

Respostas:


253

Use o += operador de atribuição :

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

Tecnicamente, você pode colocar qualquer expressão que desejar na expressão final do loop for, mas normalmente é usada para atualizar a variável do contador.

Para obter mais informações sobre cada etapa do loop for, consulte o artigo MDN .


Obrigado pelos detalhes - eu tinha certeza de que havia uma maneira de colocar expressões mais avançadas no terceiro slot - eu tinha apenas esquecido que ele precisa definir a variável, então obviamente i+3não funciona.
brentonstrina,

@brentonstrine: Sem problemas, fico feliz em poder ajudar
Andrew Whitaker,

Qual é a causa do loop infinito quando o fazemos i+3?
Sanjay Shr

1
@SanjayShr i+3não altera o valor dei
Nahid

@Nahid Sim, comentei minha resposta. Thanx
Sanjay Shr

13

Um forloop:

for(INIT; TEST; ADVANCE) {
    BODY
}

Significa o seguinte:

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

Você pode escrever praticamente qualquer expressão para INIT, TEST, ADVANCEe BODY.

Observe que os ++operadores e variantes são operadores com efeitos colaterais (deve-se tentar evitá-los se você não estiver usando-os como i+=1e semelhantes):

  • ++i significa i+=1; return i
  • i++ significa oldI=i; i+=1; return oldI

Exemplo:

> 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), porque i=i+2é igual ai+=2
arximughal

5

A resposta de Andrew Whitaker é verdadeira, mas você pode usar qualquer expressão para qualquer parte.
Lembre-se de que a segunda expressão (do meio) deve ser avaliada para que possa ser comparada a um trueor booleano false.

Quando uso um forloop , penso nele como

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

como sendo

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

1

Você certamente pode. Outros indicaram corretamente que você precisa fazer i += 3. Você não pode fazer o que postou porque tudo o que você está fazendo aqui é adicionar, i + 3mas nunca atribuir o resultado de volta i. i++é apenas uma abreviatura para i = i + 1, da mesma forma i +=3é uma abreviatura para i = i + 3.


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

adicional

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

A última parte do operador ternário permite que você especifique o tamanho do passo de incremento. Por exemplo, i ++ significa incremento de 1. i + = 2 é o mesmo que i = i + 2, ... etc. Exemplo:

let val= [];

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


console.log(val);

Resultados esperados: "2,4,6,8"

'i' pode ser qualquer ponto flutuante ou número inteiro, dependendo do tamanho do passo desejado.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.