2011-07-18 16 views
0

これは非常に基本的なようですが、これを行うための最良の方法を見つけることができません...ユーザーが選択した開始変数と終了変数をループする関数を設定しようとしています。これが私の結末ですが、もっと良い方法があると確信しています(demo)。動的開始変数と終了変数を使用したJavascriptループ

:x &の変数はゼロではなく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; 
}; 

私はこの機能を試してみましたが、結果は1つの結果オフになっているときに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++){ 

} 

実際の違いは、開始と終了には影響しないということだけです。包括xから値を合計します

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

それはあなたのコード(両方のバージョン)があるので:

0

は、私はあなたがyの項目を含める場合、あなたが必要とする追加の注意点と@kingjivに同意します〜yまで。 - はるかに読みやすい

使用Math.minとMath.max:

1

は、私はいくつかの変更を行いたいです。

最初の値が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); 
}