2011-07-18 58 views
0

這似乎很基本,但我找不到最好的方法來做到這一點......我試圖設置一個函數,循環用戶選擇的開始和結束變量。這是我結束了,但我相信有一個更好的方式來做到這一點(demo)。Javascript循環與動態的開始和結束變量

注意:x變量被索引爲1,而不是0。

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; 
}; 

那麼,是第一個功能是最好的,或者是否有人有一個更好的方法?

+2

似乎對我很好,但你可以使用'start = Math.min(x,y);'和'end = Math.max(x,y);'使腳本更具可讀性 –

回答

2

第一個也不錯。我認爲這是比較傳統的:

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

} 

只有真正的區別是它不會影響開始和結束。

0

我與添加警告@kingjiv同意,如果您想包括y的項目,那麼你需要:

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

因爲它是你的代碼(兩個版本)將x包括總價值到y獨家。

1

我會做一些改動:

使用Math.min和Math.max - 更具有可讀性。

如果您想要的第一個值是values[start],請不要從開始減去1。

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