2017-08-03 235 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 –