抽象函数来对数组的元素求和

时间:2013-01-17 01:05:58

标签: javascript jquery arrays

我有40个不同的数组,我想找到每个数组的平均值。 为了对每一个做,我有这个代码:

var SumArray1 = 0;
var avgArray1 = 0;

$.each(array1,function() {
    SumArray1 += this;
    avgArray1 = (SumArray1)/(array1.length);
    });

但是由于我有这40个数组,我试图寻找一种方法来使该函数抽象,但我不知道如何使用$ .each为函数引入参数,我不认为有四十功能是正确的做法...... 谢谢!

3 个答案:

答案 0 :(得分:2)

您的实施每次计算平均值,但最后一次只能获得正确的值。这不是必要的。

此外,没有必要使用$.each,这会强制您使用额外的闭包(我之前关于等待的陈述是错误的,因为$.each是同步的)。

以下更简单:

function avgArray(array) {
   var i,l,s = 0;
   for (i=0,l=array.length; i<l; i++) s+= array[i];

   return s/l;
}

答案 1 :(得分:1)

添加此代码:

Array.prototype.average = function() {
    var s = 0;
    for(var i = 0; i < this.length; ++i) {
        s += this[i];
    }
    return s/this.length;
}

然后,您可以在任何时候执行类似

的操作
var myArray = [1,2,3,4];
var calculatedAverage = myArray.average();  // This will equal 2.5

答案 2 :(得分:0)

数组有内置的reduce功能,如果你喜欢短的单行,你也可以这样做:

var arr = [1,2,3,4];

function sum(x,y){
    return x + y;
}

var total = arr.reduce(sum); // total -> 10

// This also works
var total = arr.reduce( function(x,y) { return (x + y); } );

var avg = ( total / arr.length );

Reduce是一个高阶函数,可以将序列“减少”为单个值。

这是reduce的执行流程。

var temp = sum( arr[0], arr[1] );
temp = sum( temp, arr[2] );
temp = sum( temp, arr[3] );
return temp;

窃取Andrew Shepherd的答案,为Array数据结构添加新功能。

Array.prototype.sum = function() { return this.reduce( function(x,y) { return (x+y); } )};
Array.prototype.avg = function() { return (this.sum() / this.length) };