Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
优化javascript(如果有)18次_Javascript_Optimization - Fatal编程技术网

优化javascript(如果有)18次

优化javascript(如果有)18次,javascript,optimization,Javascript,Optimization,我正在尝试创建一个高尔夫记分卡,并且能够这样做: 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];

我正在尝试创建一个高尔夫记分卡,并且能够这样做:

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次?使每一行变得更长。。。我怎样才能做得更优化


希望提前得到帮助和感谢:-

这就像是在求和,因此可以使用JavaScript中的内置reduce函数:

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);
有关详细信息和浏览器兼容性,请参见

注:


此解决方案假定您使用的是真实的array.isArray和相对较新的浏览器功能。

其中i是您现有的变量:

var totalpoints = 0;
for(var j = 0; j < i; j++) {
    totalpoints += pp0[j];
}
这几乎就是阵列发明的目的

您可以使用:

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

基本上,您正在做的是求和,因此使用方法可能是一个良好的开端:

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

return sum;
}

你可以试着写一个循环

     totalPoints = 0;

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

看起来您只想将pp0数组中的第一个i值相加,因此请使用循环:

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

使用循环:。这个问题似乎是一个更适合的问题。提前几秒钟:……不要忘记用零初始化+1!+JavaScript函数语法的可耻之处在于在这种情况下过于冗长。尽管命名函数可能会有所帮助。pp0.0,n.reducesum,0@疯狂的雨是的。我最近一直在玩弄Dart,它更棒:totalpoints=pp0.foldprev,cur=>prev+cur;这正是你喜欢的飞镖吗?我一直把它放在我的视线里。当你可以从头开始时,这是一个巨大的优势。如果他们的JS交叉编译器支持IE8,我可能会从今天开始使用它。@CrazyTrain-是的,喜欢Dart。我的网站使用了IE8中没有的HTML5功能,所以效果很好。但在工作中不使用它,因为重写所有内容需要很长时间。。。也许当他们达到1.0时,我会试着在工作中推动它。每个人都很完美,尽管这个人记得在I:-@Mansa-j中加1