2016-03-11 3 views
0

Прочитайте приведенный ниже код, обратите внимание, что условие цикла for for зависит от параметра step.Динамическое условие Javascript для цикла

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

Возможно ли в JS сделать это?

Код:

function(start, end, step) { 
    if (step === undefined) { 
    step = 1; 
    } 

    var result = []; 
    for (; (step < 0) ? start >= end : start <= end; start += step) { 
    result.push(start); 
    } 

    return result; 
} 

Моя попытка:

function(start, end, step) { 
    if (step === undefined) { 
    step = 1; 
    } 

    var condition = (step < 0) ? start >= end : start <= end; 
    var result = []; 
    for (; condition; start += step) { 
    result.push(start); 
    } 

    return result; 
} 
+0

Это не сработает, так как условие оценивается до того, как 'start' будет когда-либо изменен. Ручным способом было бы определить их как функцию. Однако определенно лучший способ. Я пойду по нему. – Carcigenicate

ответ

2

Чтобы сделать это, вам нужно сделать condition функцию, как показано ниже. Но даже если вы это сделаете, условие все равно выполняется на каждой итерации цикла.

var condition = (step < 0) ? 
     function(start){ 
      return start >= end; 
     } : 
     function(start){ 
      return start <= end; 
     }; 
    var result = []; 
    for (; condition(start); start += step) { 
    result.push(start); 
    } 
Смежные вопросы