计算一个数组中的平均值
1:普通写法:
var Calculator = {
average: function() {
var sum=0;
for(var i=0;i<arguments.length;i++){
if(typeof arguments[i]!=="number"){
return 0;
}else{
sum+=arguments[i];
}
}
return arguments.length===0?0:sum/arguments.length;
}
2:大神写法:
var Calculator = {
average: function() {
return Array.prototype.slice.call(arguments).reduce(function(prev, next) {
return prev + next;
}, 0) / (arguments.length || 1);
}
};
//方法中一般都会有默认的arguments,可以当作一个伪数组,只具有length属性
//array.reduce(callbackfun,initValue)方法:必须有数组调用,对数组中的所有元素调用回调函数,0为默认值
//arguemnt由于不是真正的数组这不能调用reduce方法
//slice方法必须由数组对象(String也有该方法)来调用,Array是一个类,不能直接Array.slice,需要使用原型链来调用
Array.prototype.slice.call(arguments):总的来说是将一个伪数组转化为一个真实的数组
//后面的argument.length不能为0,使用||赋默认值1
写法2:
var Calculator = {
average: function() {
var sum = [].reduce.call(arguments, function(t, n) { return t + n; }, 0);
return sum === 0 ? 0 : sum / arguments.length;
}
};