Может ли цикл for увеличиваться / уменьшаться более чем на единицу?

119

Есть ли другие способы увеличить forцикл в Javascript, кроме i++и ++i? Например, я хочу увеличить на 3 вместо единицы.

for (var i = 0; i < myVar.length; i+3) {
   //every three
}
brentonstrine
источник
4
Не могли бы вы просто заменить третий аргумент i = i + 3? Или это только на Java?
CptJesus
1
Да, это нормально i++и ++iпохоже на то, что i+=1если оно используется в объявлении цикла for, поэтому i+=3будет работать.
elclanrs
1
forПетля не увеличивает ничего. Ваш код, используемый в forзаявлении, делает. Это полностью зависит от вас, как / если / где / когда вы хотите изменить iили любую другую переменную в этом отношении.
I Hate Lazy
2
Это не цикл for, это бесконечный цикл. Вы имеете в виду i+=3.
ninjagecko
2
Я понимаю, что это простой вопрос с простым решением, но в чем причина отрицательных голосов? Я почти уверен, что это не дубликат.
brentonstrine

Ответы:

254

Используйте += оператор присваивания :

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

Технически вы можете поместить любое выражение, которое хотите, в последнее выражение цикла for, но обычно оно используется для обновления переменной счетчика.

Дополнительные сведения о каждом шаге цикла for см. В статье MDN .

Эндрю Уитакер
источник
Спасибо за подробности - я был почти уверен, что есть способ поместить более сложные выражения в третий слот - я просто забыл, что он должен определять переменную, поэтому, очевидно i+3, не работает.
brentonstrine
@brentonstrine: Без проблем, рад, что смог помочь
Эндрю Уитакер,
В чем причина бесконечного цикла, когда мы это делаем i+3?
Sanjay Shr 03
1
@SanjayShr i+3не меняет значениеi
Нахид
@Nahid Да, я прокомментировал свой ответ. Спасибо
Санджай Шр
13

forЦикл:

for(INIT; TEST; ADVANCE) {
    BODY
}

Означает следующее:

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

Вы можете написать практически любое выражение INIT, TEST, ADVANCE, и BODY.

Обратите внимание, что ++операторы и варианты являются операторами с побочными эффектами (их следует избегать, если вы не используете их подобные i+=1и тому подобное):

  • ++i средства i+=1; return i
  • i++ средства oldI=i; i+=1; return oldI

Пример:

> i=0
> [i++, i, ++i, i, i--, i, --i, i]
[0, 1, 2, 2, 2, 1, 0, 0]
ninjagecko
источник
8
for (var i = 0; i < 10; i = i + 2) {
    // code here
}​
Адиль Малик
источник
или for (var i = 0; i < 10; i+=2), потому что i=i+2равноi+=2
arximughal
5

Ответ Эндрю Уитакера верен, но вы можете использовать любое выражение для любой части.
Просто помните, что второе (среднее) выражение должно оцениваться, чтобы его можно было сравнить с логическим trueилиfalse .

Когда я использую forцикл , я думаю о нем как о

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

как быть

var i = 0;
while( i < 10 ) {
    /* expression */
    ++i;
}
Пол С.
источник
1

Вы конечно можете. Другие правильно указали, что вам нужно делать i += 3. Вы не можете делать то, что опубликовали, потому что все, что вы здесь делаете, это добавляете, i + 3но никогда не присваиваете результат обратно i. i++это просто сокращение i = i + 1, аналогично i +=3является сокращением для i = i + 3.

Судеш Банскота
источник
1
for (var i = 0; i < myVar.length; i+=3) {
   //every three
}

дополнительный

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
Jayantha
источник
-1

Последняя часть тернарного оператора позволяет указать размер шага приращения. Например, i ++ означает увеличение на 1. i + = 2 совпадает с i = i + 2, ... и т. Д. Пример:

let val= [];

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


console.log(val);

Ожидаемые результаты: «2,4,6,8»

«i» может быть любым числом с плавающей запятой или целым числом в зависимости от желаемого размера шага.

Невилл Лусимба
источник