2

40 種類の配列があり、それぞれの平均値を見つけたいと考えています。それぞれでそれを行うために、私はこのコードを持っています:

var SumArray1 = 0;
var avgArray1 = 0;

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

しかし、私はそれらの 40 個の配列を持っているので、その関数を抽象化する方法を探していましたが、$.each を使用して関数のパラメーターを導入する方法がわかりません。正しいこと...ありがとう!

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;

Array データ構造に新しい関数を追加するための 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 に答える