Цикл Javascript с динамическими переменными начала и конца - PullRequest
0 голосов
/ 19 июля 2011

Это кажется довольно простым, но я не могу найти лучший способ сделать это ... Я пытаюсь настроить функцию, которая проходит между выбранными пользователем начальной и конечной переменными. Это то, чем я закончил, но я уверен, что есть лучший способ сделать это ( demo ).

Примечание : переменные x & y индексируются в единицу, а не в ноль.

getWidths1 = function(x, y) {
    var start = (x < y) ? x : y,
        end = (x < y) ? y : x,
        total = 0;
    for (; start < end; start++) {
        total += values[start - 1] || 0;
    }
    return total;
};

Я пробовал эту функцию, но результаты - один результат, когда y> x:

getWidths2 = function(x, y) {
    var total = 0,
        diff = (x < y) ? 1 : -1;
    while (x !== y) {
        total += values[x - 1] || 0;
        x += diff;
    }
    return w;
};

Итак, первая функция лучше, или у кого-то есть лучший метод?

Ответы [ 3 ]

3 голосов
/ 19 июля 2011

Первое не плохо.Я думаю, что это немного более традиционно:

for (var i = start; i < end; i++){

}

Единственная реальная разница в том, что это не влияет на начало и конец.

1 голос
/ 19 июля 2011

Я бы сделал несколько изменений:

Используйте Math.min и Math.max - гораздо удобнее для чтения.

Не вычитайте единицу из начала, если первое желаемое значение - values[start].

var getWidths1 = function(x, y) {
    var start = Math.min(x,y), end = Math.max(x,y);
    var total = 0;
    for (; start < end; start++) {
        total += values[start] || 0;
    }
    return(total);
}
0 голосов
/ 19 июля 2011

Я согласен с @kingjiv с добавленной оговоркой, что если вы хотите включить элемент в y, тогда вам нужно:

for (var i = start; i <= end; i++){
...
}

Так как ваш код (обе версии) будет суммировать значенияот x включительно до y эксклюзива.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...