给定一个数组[1,2,3,4],如何求其元素的和?(在这种情况下,总数为10。)

我认为每个美元可能有用,但我不确定如何实现它。


当前回答

带reduce()

[1, 2, 3, 4].reduce((a, b) => a + b, 0); // 10

使用forEach()

let sum = 0;
[1, 2, 3, 4].forEach(n => sum += n);
sum; // 10

带参数

function arrSum(arr) { 
  sum = 0;  
  arr.forEach(n => sum += n); 
  return sum; 
}

arrSum([1, 2, 3, 4]) // 10

其他回答

如果您恰好使用Lodash,则可以使用sum函数

array = [1, 2, 3, 4];
sum = _.sum(array); // sum == 10

使用递归

var sum = (arr) => arr.length === 1 ? arr[0] : arr.shift() + sum(arr);
sum([1,2,3,4]) // 10

建议(使用默认值减少)

Array.prototype.reduce可用于遍历数组,将当前元素值与先前元素值之和相加。

控制台日志([1,2,3,4].减少((a,b)=>a+b,0))控制台日志([].减少((a,b)=>a+b,0))

无默认值

你得到一个TypeError控制台日志([].减少((a,b)=>a+b))

ES6箭头功能之前

控制台日志([1,2,3].reduce(函数(acc,val){return acc+val;},0))控制台日志([].reduce(函数(acc,val){return acc+val;},0))

非数字输入

如果非数字是可能的输入,您可能想处理它?控制台日志([“hi”,1,2,“frog”].减少((a,b)=>a+b))让numOr0=n=>isNaN(n)?0:n控制台日志([“hi”,1,2,“frog”].减少((a,b)=>numOr0(a)+numOr0)

非推荐危险评估用途

我们可以使用eval来执行JavaScript代码的字符串表示。使用Array.prototype.join函数将数组转换为字符串,我们将[1,2,3]更改为“1+2+3”,其值为6。

控制台日志(eval([1,2],3],join('+')))//如果建立阵列,这种方式很危险//因为它可能被利用,例如:eval([1,“2;alert('恶意代码!')”].join('+'))

当然,显示警报并不是可能发生的最糟糕的事情。我之所以将此作为奥特蒙德问题的答案,是因为我认为这一问题没有得到澄清。

Object.defineProperty(Object.prototype, 'sum', {
    enumerable:false,
    value:function() {
        var t=0;for(var i in this)
            if (!isNaN(this[i]))
                t+=this[i];
        return t;
    }
});

[20,25,27.1].sum()                 // 72.1
[10,"forty-two",23].sum()          // 33
[Math.PI,0,-1,1].sum()             // 3.141592653589793
[Math.PI,Math.E,-1000000000].sum() // -999999994.1401255

o = {a:1,b:31,c:"roffelz",someOtherProperty:21.52}
console.log(o.sum());              // 53.519999999999996

我是JavaScript和一般编码的初学者,但我发现一种简单易行的方法可以将数组中的数字相加,如下所示:

    var myNumbers = [1,2,3,4,5]
    var total = 0;
    for(var i = 0; i < myNumbers.length; i++){
        total += myNumbers[i];
    }

基本上,我想贡献这一点,因为我没有看到很多不使用内置函数的解决方案,而且这种方法很容易编写和理解。