在Javascript中轻松添加值数组(例如,无循环)

时间:2011-02-10 12:25:07

标签: javascript arrays optimization

我想知道是否有人知道在javascript中添加值数组的好方法?

我想出了:

var myArray = [1,2,3,4,5];

var total = eval(myArray.join("+"));

哪个好又短,但我猜是从num到string然后评估回到一个数字是获得总数的一种缓慢方式。

2 个答案:

答案 0 :(得分:4)

最合适的方法是使用[Array.prototype.reduce]( https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Array/reduce)函数,是ECMAScript第5版中语言的补充:

var myArray = [1,2,3,4,5],
    total   =  myArray.reduce(function (curr, prev) { return curr + prev; });

alert(total);

当然,旧浏览器不支持此功能,因此您可能希望在代码中包含compatibility implementation

答案 1 :(得分:2)

更新 - 结合Andy的方法和Prototyping方法......

Array.prototype.sum = function(){
    return this.reduce(function(a,b) {return a+b} );
}

现在所有数组都将具有sum方法。例如var total = myArray.sum();

原始答案......

我只会被

诱惑
var myArray = [1,2,3,4,5];
var sum     = 0;

for (var i=0, iMax=myArray.length; i < iMax; i++){
    sum += myArray[i];
};

alert(sum);

如果你经常使用它,就把它分解成一个函数。甚至更整洁,原型......

Array.prototype.sum = function(){
    for(var i=0, sum=0, max=this.length; i < max; sum += this[i++]);
    return sum;  
}

var myArray = [1,2,3,4,5];

alert(myArray.sum());

DZone Snippets提供