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

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


当前回答

了解底层流程的最简单答案:

let array = [10, 20, 30, 40, 50]
let total = 0

for(let i in array)
{
    total += array[i]
}

console.log(total)

&如果您已经熟悉底层流程,那么内置方法可以节省您的时间:

let array = [10, 20, 30, 40, 50]
let total = array.reduce((x, y) => x + y)
console.log(total)

其他回答

arr.reduce(function (a, b) {
    return a + b;
});

参考:Array.prototype.reduce()

var total = 0;
$.each(arr,function() {
    total += this;
});

试试这个。。。

function arrSum(arr){
    total = 0;  
    arr.forEach(function(key){
        total = total + key;            
    });
    return total;
}
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

建议(使用默认值减少)

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('+'))

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