函数的参数都是类数组的集合,因此需要先转换成数组,再进行操作。
平均值:要去最大值,最小值后再合计相除,就得出结果。
1.常规做法
// 获取平均数
// arguments.sort() //->argument.sort is not function arguments是一个类数组集合,它不是数组,不能直接使用数组的方法
function avgFn(){
// ->将类数组转换为数组
let ary = [];
for(var i=0;i<arguments.length;i++){
ary[i] = arguments[i]
}
//->2.给数组排序没去掉开头结尾,剩下球平均数
ary.sort((a,b)=>{return a-b})
ary.shift()
ary.pop()
return (eval(ary.join("+")) / ary.length).toFixed(2);
}
avgFn(8,8,7,8,9,10)
2.采用数组的分割方式
function avgFn(){
// ->将类数组转换为数组
// let ary = Array.prototype.slice.call(arguments);
let ary = [].slice.call(arguments)
//->2.给数组排序没去掉开头结尾,剩下球平均数
ary.sort((a,b)=>{return a-b})
ary.shift()
ary.pop()
return (eval(ary.join("+")) / ary.length).toFixed(2);
}
avgFn(8,8,7,8,9,10)
3.call改变this指向来实现
function avgFn(){
Array.prototype.sort.call(arguments,function(a,b){return a-b});
[].shift.call(arguments);
[].pop.call(arguments);
return (eval([].join.call(arguments,'+'))/arguments.length).toFixed(2)
}
avgFn(8,8,7,8,9,10)
还有其它的,欢迎补充~~~