2013-07-16 65 views
0

我想創建一個高爾夫球記分卡,並能做到這樣的:優化的JavaScript,如果其他18次

if(i == 0){ 
    totalpoints = pp0[0]; 
} else if(i == 1){ 
    totalpoints = pp0[0]+pp0[1];  
} else if(i == 2){ 
    totalpoints = pp0[0]+pp0[1]+pp0[2]; 
} else if(i == 3){ 
    totalpoints = pp0[0]+pp0[1]+pp0[2]+pp0[3]; 
}.... 

這偏離航向的推移18次?使每條線更長......我如何做到這一點更優化?

希望能幫助和在此先感謝:-)

+5

使用一個循環:https://developer.mozilla.org/ EN-US /文檔/網絡/的JavaScript /參考/語句/對。這個問題似乎更適合http://codereview.stackexchange.com/。 –

回答

2

您可以使用此:

for (var j=0;j<i+1;j++) { 
    totalpoints += pp0[j]; 
} 
+1

大家都很完美,儘管這個人記得給我加1 :-) – Mansa

+0

@Mansa - 'j <= i'雖然會更好 – tjameson

2

這就像你正在做一個總和,所以你可以使用內置的reduce功能在JavaScript:

totalpoints = pp0.reduce(function (prev, cur) { 
    return prev + cur; 
}, 0); 

這將大大通過pp0中的所有元素並返回一個和。但是,如果你只想要PP0的第n個部分,用切片:

totalpoints = pp0.slice(0, n).reduce(function (prev, cur) { 
    return prev + cur; 
}, 0); 

的詳細信息和瀏覽器的兼容性見mdn

注:

此解決方案假定您使用的是真正的陣列(Array.isArray())和相對較新的瀏覽器功能。

+0

+1 JavaScript函數語法的恥辱是這種情況下的冗長。雖然命名的功能可以提供幫助。 'pp0.slice(0,n).reduce(sum,0);' –

+0

@CrazyTrain是的。最近我一直在搞Dart,它更好:'totalpoints = pp0.fold((prev,cur)=> prev + cur);'(這確切的事情是一個[示例](http:// api。 dartlang.org/docs/releases/latest/dart_core/List.html#fold)) – tjameson

+0

你喜歡Dart嗎?我一直在我的視線。這樣一個巨大的優勢,當你可以從一個乾淨的石板開始。如果他們的JS交叉編譯器支持IE8,我今天可能會開始使用它。 –

4

在哪裏我是你現有的變量:

var totalpoints = 0; 
for(var j = 0; j < i; j++) { 
    totalpoints += pp0[j]; 
} 

這是非常被髮明瞭陣列來!

+1

提前幾秒:)) –

+0

...並且不要忘記初始化爲零。 +1! – Bergi

2
for (j=0; j<=i; j++) { 
    totalpoints += pp0[j]; 
} 
2

基本上你正在做的是做算術什麼,所以做的方法可能是一個良好的開端:

function sum(counter) 
var sum =0; 
for(var i = 0; i < counter ; i++) { 
sum+= pp0[i]; 
} 

return sum; 
} 
2

你可以試試寫一個循環。

 totalPoints = 0; 

    for(var i=0;i<j;i++) 
    { 
      totalPoints += pp0[i]; 
    } 
2

看起來你只是想加起來第一ipp0陣中,所以用一個循環:

var totalpoints = 0; 
for (var index=0; index<i; index++) { 
    totalpoints += pp0[index] 
}