簡體   English   中英

對數組函數中的所有數字求和而不返回總和

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM