首页 > 试题广场 >

数组求和

[编程题]数组求和
  • 热度指数:172704 时间限制:C/C++ 2秒,其他语言4秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
计算并返回给定数组 arr 中所有元素的总和

输入描述:
[ 1, 2, 3, 4 ]


输出描述:
10
示例1

输入

[ 1, 2, 3, 4 ]

输出

10
不考虑算法复杂度,用递归做:
function sum(arr) {
    var len = arr.length;
    if(len == 0){
        return 0;
    } else if (len == 1){
        return arr[0];
    } else {
        return arr[0] + sum(arr.slice(1));
    }
}
常规循环:
function sum(arr) {
    var s = 0;
    for (var i=arr.length-1; i>=0; i--) {
        s += arr[i];
    }
    return s;
}
函数式编程 map-reduce:
function sum(arr) {
    return arr.reduce(function(prev, curr, idx, arr){
        return prev + curr;
    });
}
forEach遍历:
function sum(arr) {
    var s = 0;
    arr.forEach(function(val, idx, arr) {
        s += val;
    }, 0);
 
    return s;
};
eval:
function sum(arr) {
    return eval(arr.join("+"));
};


编辑于 2016-05-29 20:58:21 回复(32)
用forEach遍历
//创建一个新的变量 等于零
var a = 0;
//forEach进行遍历(要记住forEach的语法哦)
arr.forEach(function(val,index,arr){
    a+=val
},0);
//不要忘了 return终止函数哦
return a

发表于 2022-06-01 14:27:15 回复(0)
竟然 没有 引入 jQuery  !!!
发表于 2021-10-20 14:29:17 回复(0)
function sum(arr) {
    // 如果数组长度为1,直接返回第一个元素
    if(arr.length === 1){
        return arr[0]
    }
    return arr.reduce((acc,val)=> {
        return acc += val
    })
}

发表于 2021-03-21 18:31:37 回复(0)
这应该不能使用ES6的语法:
我使用箭头函数通过不了:
function sum(arr) {
    return arr.reduce((previousValue, currentValue ,index, arr) => {
                   return previousValue + currentValue;
            },0);
};
必须改成:
function sum(arr) {
    return arr.reduce(function(previousValue, currentValue ,index, arr) {
                   return previousValue + currentValue;
            },0);
};



发表于 2019-08-22 11:33:34 回复(0)
function sum(arr) {
    var s = 0;
    arr.forEach(function(ele) {
        s += ele;
    });
    return s;
}

function sum(arr) {
    var len = arr.length;
    if(len == 0) {
        return 0;
    } 
    else if (len == 1) {
        return arr[0];
    } 
    else {
        return arr[0] + sum(arr.slice(1));
    }
}

function sum(arr) {
    return arr.reduce(function(prev, curr) {
        return prev + curr;
    });
}

function sum(arr) {
    return eval(arr.join("+"));
}

编辑于 2019-08-08 21:43:14 回复(0)
function sum(arr) {
    // 1.0 定义一个变量来放置累加的值
    var sum = 0;   
    // 2.0 遍历(即循环),目的是为了获取数组arr的每一个值。
    // i < arr.length:假设arr[1,3,4],则arr.length为3
    // i < arr.length,故i < 3,i的最大值为2
    // arr[0] = 1,arr[0] = 2,arr[1] = 3
    for(var i = 0;i < arr.length;i++){
        sum = sum+arr[i];
    }
       return sum;
}
发表于 2019-06-11 19:11:55 回复(0)
function sum(arr) {
    return arr.reduce((item1,item2)=>{return item1 + item2});
}

编辑于 2019-04-29 12:17:17 回复(0)
function sum(arr) {
    return arr.reduce(function(total,num){
        return total+num;
    })
}
发表于 2018-09-04 16:30:46 回复(0)
使用forEach遍历传入的数组,创建一个变量把遍历的数相加之后的值保存下来
function sum(arr) {
    var sum = 0;
    arr.forEach(function(item,i){
        sum += item
    })
    return sum
}


编辑于 2018-06-08 16:39:16 回复(0)
function sum(arr) {
    var s = 0;
    if (Array.isArray(arr)) {
       arr.forEach(function(item, index, array) {
         s += item;
      });
    }
    return s;
}

发表于 2018-04-28 14:21:52 回复(0)
function sum(arr) {
    return arr.reduce((total, currentValue)=>total+currentValue);
}
为啥0%
发表于 2018-03-31 23:28:47 回复(0)
/*我想到的答案:
*1、常规循环
*2、forEach
*3、reduce
*/
function add(arr){
    var sum = 0, i, len;    
    for( i = 0, len = arr.length; i < len; i+=1){
        sum += arr[i];
    }
    return sum;
}
function add(arr){
    var sum = 0;    
    arr.forEach( function( el ) {
         sum += el;
    });
    return sum;
}
function add(arr){
  return add.reduce( function( totle, val ){
      return totle + val;
  });
}



发表于 2017-11-15 02:38:23 回复(1)
function sum(arr) {
    if(Array.prototype.reduce){
        var suma = arr.reduce(function(prev,cur,index,array){    return prev+cur;    });
        return suma;
    }else{
        var s = 0;
        for(var i=0; i<arr.length; i++){
            s+=arr[i];
        }
        return s;
    }
    return 0;

}

发表于 2017-03-13 18:23:42 回复(1)

1.常规方法:适用于数字;

2.数组归并方法:reduce()和reduceRight()。
      这两种方法都接收两个参数:一个在每一项上调用的函数和(可选项)作为归并基础的初始值。传入给reduce()和reduceRight()的函数接收4个参数:前一个值,当前值,项的索引和数组对象。这个函数返回的任何值都会作为第一个参数自动传给下一项。
     使用reduce()还是reduceRight(),主要取决于从哪头开始遍历。除此之外他们完全相同。

发表于 2017-02-28 22:04:46 回复(1)
function sum(arr) { return arr.length == 0 ? 0 : arr.reduce(function (x, y) { return x + y
            }
    )
}
发表于 2016-11-09 15:12:08 回复(0)
Yp头像 Yp
function sum(arr) {
    var sum=0;
arr.map(function(item,index){
        sum+=item;
    });
    return sum
}
发表于 2016-10-13 20:31:05 回复(1)
function sum(arr) {
var sum=0;
    for(var  i=0; i<arr.length; i++){
        sum+=parseInt(arr[i]);
    }return sum;
}
sum([ 1, 2, '3', 4 ]);
发表于 2016-09-23 17:23:55 回复(1)
Math.sum.apply(null,arr)
发表于 2016-02-16 19:34:24 回复(1)
function sum(arr) {
    var ans=0;
    for(var i = 0;i<arr.length;i++)
        ans+=arr[i];
    returnans;
}
发表于 2015-09-04 22:24:13 回复(1)