Javascript 对数组函数中的所有数字求和,但不返回和

Javascript 对数组函数中的所有数字求和,但不返回和,javascript,Javascript,我正在尝试创建一个函数,将数组中的所有数字相加!我是JavaScript新手,需要有人给我指出正确的方向 function sum(arr) { var i = 0; for (var index = 0; index < arr.length; index++) { return index += arr[i]; } } sum([1, 2, 3]); //6 函数和(arr){ var i=0; 对于(var指数=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
函数和(arr){
var i=0;
对于(var指数=0;指数
使用进行以下操作:

函数getSum(ari){ 返回ary.reduce(函数(和,值){ 返回和+值; }, 0); } log(getSum([0,1,2,3])使用进行以下操作:

函数getSum(ari){ 返回ary.reduce(函数(和,值){ 返回和+值; }, 0); }
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
    }
}
正如另一个答案所指出的,一个可能更好的替代方法是使用array reduce函数——但是该答案中的代码并不是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

来说明代码的错误之处

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
    }
}
正如另一个答案所指出的,一个可能更好的替代方法是使用array reduce函数——但是该答案中的代码并不是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相加


当然,这不会对性能造成影响,但是为什么不正确使用内置函数呢:代码中有很多基本问题

您需要一个单独的变量来累加结果。代码正在写入for循环的索引变量。这是错误的,原因有很多

您还可以在循环的第一次迭代之后返回

假设您想要使用for循环(这不是最少的代码量)

函数和(arr){
var总和=0;
对于(var指数=0;指数
代码中有很多基本问题

您需要一个单独的变量来累加结果。代码正在写入for循环的索引变量。这是错误的,原因有很多

您还可以在循环的第一次迭代之后返回

假设您想要使用for循环(这不是最少的代码量)

函数和(arr){
var总和=0;
对于(var指数=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
函数和(arr){
//这是我们要添加数字的变量
var acc=0;
对于(var指数=0;指数

但是有一些内置的方法可以做到这一点,如Scott Marcus提到的Array.reduce()。

下面是如何让函数工作的:

  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
function Sum(arr) {

   var sum = 0;

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

}

Sum([1, 2, 3]); //6
函数和(arr){
//这是我们要添加数字的变量
var acc=0;
对于(var指数=0;指数
但是有一些内置的方法可以做到这一点,如Scott Marcus提到的Array.reduce(){
function Sum(arr) {

   var sum = 0;

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

}

Sum([1, 2, 3]); //6
var总和=0; 对于(var指数=0;指数 Return立即退出函数。您的代码永远不会求和值。您的代码中的“i”是什么!?!你要做什么

函数和(arr){
var总和=0;
对于(var指数=0;指数

Return立即退出函数。您的代码永远不会求和值。您的代码中的“i”是什么!?!你要做什么

return
退出函数,而不是循环。。另外,您将添加到
索引
,而不是
i
,并使用
i
作为
索引
,该索引在
0
返回时退出函数,而不是循环。。另外,您正在添加到
索引
而不是
i
,并使用
i
作为
索引
,该索引位于
0
谢谢!!我必须编写一个函数,使用一个参数(arr-一个整数数组)@MarioGomez,然后将代码放入函数中。这是正确答案“这是正确答案”。。。是的,除了它没有显示原始代码哪里出错之外,简单地给出一个使用
reduce
的答案,而不至少解释一下问题中的代码失败的原因是没有任何价值的-此外,这实际上不是reduce的最佳用法…谢谢!!我必须编写一个函数,使用一个参数(arr-一个整数数组)@MarioGomez,然后将代码放入函数中。这是正确答案“这是正确答案”。。。是的,除了它没有显示原始代码哪里出了问题外,简单地给出一个使用
reduce
的答案,而不至少解释一下问题中的代码失败的原因是没有任何价值的——此外,这实际上并不是reduce的最佳用法……谢谢@jaromanda x!!我是Javascript的乞丐!你的解释很有道理!“但是为什么不正确地使用内置函数呢?”像我这样使用函数并不是不恰当的。顺便说一句,它直接来自MDN。对不起,“不恰当”太苛刻了@ScottMar