[英]Sum all numbers in array function not returning the sum
我正在嘗試創建一個將數組中所有數字求和的函數! 我是JavaScript新手,需要有人為我指出正確的方向!
function sum(arr) {
var i = 0;
for (var index = 0; index < arr.length; index++) {
return index += arr[i];
}
}
sum([1, 2, 3]); //6
為此使用Array.reduce() :
function getSum(ary){ return ary.reduce(function(sum, value) { return sum + value; }, 0); } console.log(getSum([0, 1, 2, 3]));
說明您的代碼在哪里錯誤
function sum(arr) {
var i = 0;
for (var index = 0; index < arr.length; index++) {
return index += arr[i]; // this will return from your function in the first iteration
}
}
如評論所述, return
將在第一次迭代中退出您的函數
同樣,您要添加到index
,它應該是數組的索引,您想添加到i
,然后在循環后return i
因此,代碼應為
function sum(arr) {
var i = 0;
for (var index = 0; index < arr.length; index++) {
i += arr[index];
}
return i;
}
正如另一個答案指出的那樣,一個可能更好的替代方法是使用數組化簡函數-但是該答案中的代碼不是reduce的“最佳”用法。
function getSum(ary){
return ary.reduce(function(sum, value) {
return sum + value;
}, 0);
}
可以寫
function getSum(ary){
return ary.reduce(function(sum, value) {
return sum + value;
});
}
因為沒有“初始值”,所以使用了較少的迭代,並且第一次迭代將索引0和1加在一起
當然,這不會帶來性能差異,但是為什么不正確使用內置函數:p
代碼有很多基本問題。
您需要一個單獨的變量來累加結果。您的代碼正在寫入for循環的index變量。 這有很多原因,這是錯誤的。
您還會在循環的第一次迭代之后返回。
假設您要使用for循環(並非最少的代碼),
function sum(arr) {
var sum = 0;
for (var index = 0; index < arr.length; index++) {
sum += arr[index];
}
return sum;
}
function Sum(arr) {
var sum = 0;
for (var index = 0; index < arr.length; index++) {
sum += arr[index];
}
return index;
}
Sum([1, 2, 3]); //6
返回立即退出功能。 您的代碼將永遠不會對值求和。 您的代碼中的“ i”是什么! 和什么指數!!
這是使函數起作用的方式:
function sum(arr) {
// this is the variable we're going to add our numbers onto
var acc = 0;
for (var index = 0; index < arr.length; index++) {
// don't return here, return is used to return from a function
acc += arr[index];
}
// after adding all numbers, return the sum
return acc
}
sum([1, 2, 3]); //6
但是有內置的方法可以做到這一點,例如提到的Array.reduce()就像Scott Marcus所說的那樣。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.