这段代码怎么了?

时间:2016-05-17 23:39:56

标签: javascript

试图弄清楚这段代码有什么问题。

 //Code to return the sum of all values in an array
 var x = [ 1,2,3,4,5 ]; 

 //Function to return sum of values in an array
 function sum(arr) {

   var sum = 0;

   for (i=1; i < arr.length; i++) {
     sum = sum + x[i];
   }

   return sum;
 }

sum(x)的价值是什么?

3 个答案:

答案 0 :(得分:2)

这里有几个问题,有些问题比其他问题更糟糕

首先,你应该将我作为一个变量,i=0 - &gt; var i = 0

然后你需要开始你的for循环为0而不是1 for(var i = 1 - &gt; for(var i = 0 javascript(以及几乎所有其他语言)中的数组都是0索引的。这意味着第一项是arrayName[0]而非arrayName[1]

然后您在数组中访问了错误的值,您需要使用arr[i]而不是x[i]。您想要访问传递给函数的值,而不是之前创建的实际数组。

第8行可以使用+=缩短,也缺少分号

//Code to return the sum of all values in an array
var x = [1, 2, 3, 4, 5];

//Function to return sum of values in an array
function sum(arr) {
    var sum = 0;
    for (var i = 0; i < arr.length; i++) {
        sum += arr[i];
    }
    return sum;
}
console.log(sum(x)); //15 -- it works! (1+2+3+4+5=15)

答案 1 :(得分:1)

正如其他人所说,问题在于数组以及编程中的大多数其他内容都是零索引的。

我可以建议另一种风格选择......

 var x = [ 1,2,3,4,5 ]; 

 //Function to return sum of values in an array
 var sum = function (arr) {
   return arr.reduce(function(a,b){return a+b;})
 }

 console.log(sum(x));

虽然,此时函数是一行代码,并不值得在函数中包装。有了类似的东西,我只是简单地进行内联。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce

答案 2 :(得分:0)

如@ user6188402所述,i必须从0开始。

原因如下:

var x = [ 1,2,3,4,5 ];创建一个索引从0开始的数组,所以:

x[0] = 1
x[1] = 2
x[2] = 3
x[3] = 4
x[4] = 5

如果您从1开始sum = sum + x[i];,答案将是14而不是15