2

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

var SumArray1 = 0;
var avgArray1 = 0;

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

但是因为我有这 40 个数组,所以我试图寻找一种方法来使该函数抽象,但我不知道如何使用 $.each 为函数引入参数,而且我认为不会有 40 个函数正确的做法...谢谢!

4

3 回答 3

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;
}
于 2013-01-17T01:10:19.463 回答
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
于 2013-01-17T01:18:04.790 回答
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.prototype.sum = function() { return this.reduce( function(x,y) { return (x+y); } )};
Array.prototype.avg = function() { return (this.sum() / this.length) };
于 2013-01-17T02:28:15.583 回答