Чи може збільшити / зменшити цикл більше ніж на один?


119

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

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

4
Не можете ви просто замінити i = i + 3 третім аргументом? Або це лише на Java?
CptJesus

1
Так це нормально i++і ++i, як i+=1при використанні протягом декларації петлі так i+=3буде працювати.
elclanrs

1
forПетля не збільшує нічого. Ваш код, використаний у forвиписці, робить. Цілком залежить від вас, як / якщо / де / коли ви хочете змінити iабо будь-яку іншу змінну для цього питання.
Я ненавиджу ледачий

2
Це не для циклу, це нескінченна петля. Ви маєте на увазі i+=3.
ninjagecko

2
Я розумію, що це просте запитання з простим рішенням, але в чому причина знищення? Я впевнений, що це не дублікат.
brentonstrine

Відповіді:


253

Скористайтеся += оператором призначення :

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

Технічно ви можете розмістити будь-який вираз, який ви хочете, в остаточний вираз циклу for, але він зазвичай використовується для оновлення змінної лічильника.

Для отримання додаткової інформації про кожен крок циклу for, перегляньте статтю MDN .


Дякую за деталі - я був майже впевнений, що є спосіб ввести більш досконалі вирази в третій слот - я просто забув, що для цього потрібно визначити змінну, так що очевидно i+3не працює.
brentonstrine

@brentonstrine: Немає проблем, радий, що можу допомогти
Ендрю Вітакер

У чому причина нескінченного циклу, коли ми робимо це i+3?
Санджай Шр

1
@SanjayShr i+3не змінює значенняi
NaHiD

@Nahid Так, я прокоментував свою відповідь. Thanx
Санджай

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]


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

-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' може бути будь-якою плаваючою точкою або цілим числом, залежно від потрібного розміру кроку.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.