带有动态开始和结束变量的Javascript循环

时间:2011-07-18 23:23:29

标签: javascript loops

这看起来非常基本,但我找不到最好的方法来执行此操作...我正在尝试设置一个在用户选择的开始和结束变量之间循环的函数。这就是我最终的结果,但我确信有更好的方法(demo)。

注意:x& y变量索引为1,而不是零。

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&gt;时结果。 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 个答案:

答案 0 :(得分:3)

第一个还不错。我认为这稍微传统一点:

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

}

唯一真正的区别是它不会影响开始和结束。

答案 1 :(得分:1)

我会做一些改变:

使用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);
}

答案 2 :(得分:0)

我同意@kingjiv的补充警告,如果你想在y包含该项目,那么你需要:

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

因为它是您的代码(两个版本),所以将x包含的值与y的值相加。