2017-08-03 226 views
0

我正試圖創建一個函數來對數組中的所有數進行求和!我是JavaScript新手,需要有人指引我朝着正確的方向發展!總結數組函數中的所有數字不返回總和

function sum(arr) { 

    var i = 0; 

    for (var index = 0; index < arr.length; index++) { 
     return index += arr[i]; 
    } 
} 

sum([1, 2, 3]); //6 
+2

'return'退出函數,而不是循環..此外,您將添加到'index'而不是'i',並且使用'i'作爲索引'',這是'0'處的stcuk –

回答

1

使用Array.reduce()爲:

function getSum(ary){ 
 
    return ary.reduce(function(sum, value) { 
 
    return sum + value; 
 
    }, 0); 
 
} 
 

 
console.log(getSum([0, 1, 2, 3]));

+0

謝謝!我必須寫作一個函數,使用一個參數(ARR - 一個整數數組) –

+0

@MarioGomez然後把代碼放在一個函數中。這是正確的答案 – baao

+0

@MarioGomez好的,那麼更新的答案如何? –

1

,說明您的代碼是錯誤的

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 
    } 
} 

的評論說,在循環後將退出你的函數在第一次迭代

也,你加入index,這應該是索引到數組,你要添加到i,然後return i

所以,代碼應該是

function sum(arr) { 
    var i = 0; 

    for (var index = 0; index < arr.length; index++) { 
     i += arr[index]; 
    } 

    return i; 
} 

作爲另一個答案指出,一個可能是更好的替代方法是使用數組減少功能 - 但是,在這個問題的答案的代碼是不是「最好」的使用減少

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

+0

謝謝@ jaromanda x !!我在Javascript中成爲begginer!你的解釋很有意義! –

+0

*「但爲什麼不能正確使用內置功能」*使用我所具有的功能並非不恰當。順便說一下,它直接來自MDN。 –

+0

對不起,「不適當」太苛刻了@ScottMarcus - 後面的例子'[0,1,2,3,4] .reduce((prev,curr)=> prev + curr);'顯示沒有初始值value:p –

1

許多與代碼有關的基本問題。

您需要一個單獨的變量來累計結果。您的代碼正在寫入for循環的索引變量。這有幾個原因是錯誤的。

您也會在循環的第一次迭代之後返回。

假設你想使用一個for循環(這是不是最少的代碼量),

function sum(arr) {  
    var sum = 0; 
    for (var index = 0; index < arr.length; index++) { 
    sum += arr[index]; 
    }  
    return sum; 
} 
0

這裏是你如何讓你的函數工作:

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()。

1
function Sum(arr) { 

    var sum = 0; 

    for (var index = 0; index < arr.length; index++) { 
     sum += arr[index]; 
    } 
    return index; 

} 

Sum([1, 2, 3]); //6 

返回立即退出函數。你的代碼永遠不會總結數值。你的代碼中'我'是什麼!?!什麼指標做!?

+0

'無論如何,使用大寫字母作爲函數名稱的第一個字符** ** no ** - 「約定」使用大寫字母作爲「類別」名稱......也就是應該被調用的函數與'新'關鍵字 - 這只是一個約定 –

+0

也許你是對的,我是C程序員,所以功能意味着其他在我的pov。 – BlackMB

+0

'C'是否具有函數的個案約定?我知道這不是一個「規則」,考慮到「C」程序的入口點是「main」而不是「Main」:p –