2015-02-04 2 views
0

Я только что начал изучать JavaScript и получил довольно простой вопрос.Для цикла или if-statement?

Я собираюсь создать функцию, которую я вызываю printAnyRange(), которая принимает два аргумента: rangeStart и rangeStop. Я хочу, чтобы это возвращало строку со всеми числами, разделенными запятыми в диапазоне.

Если rangeStart меньше, чем rangeStop, то следует позвонить функции printRange().

Если rangeStart больше rangeStop, то следует позвонить функции printRangeReversed().

Мой вопрос: должен ли я использовать цикл for, чтобы сделать это, или было бы лучше с if-else?

ответ

0

Вы можете использовать, если-то еще только выбрать, какой метод для вызова. Для создания диапазона вам необходимо включить цикл.

Вы также можете следить за основной рекурсией, чтобы не создавать 3 разных метода.

var printRange = function (num1, num2) { 

    /* If num2 is smaller, call same function with arguments reversed */ 
    if (num1 > num2) return printRange (num2, num1); 

    /* Otherwise, calculate the stuff you want */ 
    var result = []; 
    for (num1; num1 <= num2; num1++) { 
     result.push(num1); 
    } 

    return result.join(','); 
}; 

Этот метод будет работать во всех случаях, которые вы описали.

+0

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

+0

_ «Мы можем сделать это более элегантным, заменив цикл for полностью на рекурсию» _ - введение большей сложности (и потребления ресурсов) без какой-либо необходимости или дополнительных преимуществ вообще не кажется «элегантным» для меня. – CBroe

+0

Рекурсивная функция, особенно при разговоре с математической ситуацией, намного легче читать, чем цикл. По крайней мере, это то, что я нашел. Однако это может не сработать для всех. –

0

Учитывая, что вы указали, что он должен вызывать 1 из 2 возможных функций, нет никакой альтернативы, кроме как использовать инструкцию if/else. Если вы хотите покончить с двумя вызовами функций и вместо этого использовать цикл for либо вперед, либо наоборот, вам все равно понадобится инструкция if (и, возможно, еще) для описания, чтобы связать все это вместе.

if(rangeStart <= rangeStop) 
{ 
    printRange(rangeStart, rangeStop); 
} 
else 
{ 
    printReverseRange(rangeStart, rangeStop); 
} 

или

var start = rangeStart; 
var stop = rangeStop; 
var inc = 1; 

if(rangeStart > rangeStop) 
{ 
     var start = rangeStop; 
     var stop = rangeStart; 
     var inc = -1; 
} 

for(var i = start; inc == 1 ? start <= stop : start >= stop; i += inc) 
{ 
    console.log(i); 
} 
Смежные вопросы