2016-05-17 81 views
-5

试图找出这段代码有什么问题。这段代码有什么问题?

//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)的值是多少?

+5

'i'必须开始在索引0 –

+0

你可能是为了增加ARR [I],而不是X [I]如果你想和()为多个阵列工作。 – user3486184

+1

注意ES6语法(当你准备好的时候)也可以很好地工作:'let sum = x.reduce((p,c)=> p + c);' – Andy

回答

2

这里有几个问题,有些是比别人差

,首先你应该delcare我作为一个变量,i=0 - >var i = 0

然后,你需要在0到启动的循环,而不是1 for(var i = 1 - >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) 
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 

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

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

+0

返回一个'reduce'的结果更简单。 – Andy

+0

你的权利,我在想每一个都是旧的,减少是不是与IE兼容。但都需要IE9,所以不妨使用更合适的功能。我更新了我的答案。 –