2016-09-27 5 views
1

Можно ли использовать if..else stat внутри внутри условия цикла?

for(var i = n1; 
 
    if(n3>0){i<=n2} 
 
    else if(n3<0){i>=n2} 
 
    else{window.alert('error')}; 
 
    i += n3){ 
 
\t nArr.push(i); 
 
}

Это код, который я хочу, чтобы запустить .. как-то .. я хочу сделать функцию диапазона, который пишет из-номеров с шагом в массив .. я выполнен, чтобы сделать это в позитивном ключе, но когда я хочу отрицательный, мне бы хотелось только инвертировать «i < = n2» знак «i> = n2» и не писать другой цикл .. это возможно?

Заранее спасибо, chiff :)

+0

ли доля _INPUT-data_ и _expected-output_ – Rayon

+0

Для цикла имеет свой синтаксис, вы не можете изменить синтаксис –

+0

@GulmuhammadAkbari Синтаксис является достаточно гибким, хотя;) –

ответ

1

вы можете объединить ваши заявления, как это:

for(var i = n1; n3>0 && i<=n2 || n3<0 && i>=n2; i += n3){ 
     nArr.push(i); 
} 

, но я бы не рекомендовал это для удобочитаемости

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

+0

вот что я искал .. но вы правы, что проверка не нужна. Так что лучше сделать сравнение до этого цикла и написать цикл два раза с двумя разными условиями? –

0

Вы можете сделать то, что вы пытаетесь сделать так:

if (n3 === 0) { 
    // show error 
    return; 
} 

for(var i = n1; n3 > 0 && i < n2 || n3 < 0 && i >= n2; i += n3) { 
    nArr.push(i); 
} 
0

if в JS не является выражением, поэтому я думаю, нет. IIFE может сделать трюк, хотя:

var a = 5; 
 
for (var i = 0; (function() { 
 
    if (a > 3) 
 
    return i < 2; 
 
    else 
 
    return i < 4; 
 
})(); i++) { 
 
    document.write(i); 
 
}

Вы могли бы сделать это гораздо чище и яснее, помещая петлю внутри if, хотя.

+0

спасибо тоже, это тоже ответ :) так я и хотел решить эту проблему –

0

Нет, вы не должны использовать оператор if-else внутри тела цикла for. Особенно если он содержит окно alert().

В вашем конкретном случае было бы лучше использовать оператор while.

var i = n1; 
while ((n3 > 0 && i <= n2) || (n3 < 0 && i >= n2)) { 
    nArr.push(i); 
    i += n3; 
} 

Я не знаю точно, чего вы хотите достичь, но это его толчок.