试图弄清楚这段代码有什么问题。
//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)
的价值是什么?
答案 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