我有40个不同的数组,我想找到每个数组的平均值。 为了对每一个做,我有这个代码:
var SumArray1 = 0;
var avgArray1 = 0;
$.each(array1,function() {
SumArray1 += this;
avgArray1 = (SumArray1)/(array1.length);
});
但是由于我有这40个数组,我试图寻找一种方法来使该函数抽象,但我不知道如何使用$ .each为函数引入参数,我不认为有四十功能是正确的做法...... 谢谢!
答案 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) };