js中的数组排序及求平均数
2016-08-07 22:19:53
287
1、求数组的最大值和最小值
求数组最大值和最小值的几种方法:
1.1 数组排序
现将数组排序,然后取第一个值和最后一个值
1.2 Math.min();Math.max();
这两个方法的参数不能接收数组
可以先把[12,1,41,5,2,4,6,3].join()/toString()数组转为字符串
然后使用eval()把一个字符串变为JS表达式执行
但是eval(“12,1,41,5,2,4,6,3”)只能获取到最后一项的值
可以先将想要的内容拼接为字符串,然后再执行
eval(“Math.max(“+arr.toString()+”)”);
eval(“Math.min(“+arr.toString()+”)”);
一个括号中出现多项表达式,中间以逗号隔开,但是只能获取到最后一项,此为
括号表达式
括号表达式:(x1,x2,x3…)括号表达式中出现多项内容时,并以逗号隔开时,只能获取或执行最后一项
function f1(){
console.log(this);
}
function f2(){
console.log(this);
}
var obj = {name:"Amy",fn:f2}
;(f1,f2)(); //window
;(f1,obj.f2)(); //window
;(obj.f2)(); //obj
;(f2)(); //window
1. 3 假设法
假设数组第一个值为最大值,然后和后面的值逐个比较,遇到比假设值大的则替换,直到结束
var min = arr[0];
var max = arr[0];
for(var i=0;i<arr.length;i++){
var cur = arr[i];
cur>max ? max = cur : null;
cur<min ? min = cur : null;
}
假设法类似自定义属性,这都是编程中的常用思想
1.4 apply参数
var arr = [12,15,46,53,32,16,33];
var a = Math.max.apply(null,arr);
2、求平均数
- 将数据以参数形式传入方法中,但是arguments为类数组,不能直接使用数组方法,需要将类数组转化为数组
- 先将arguments转化为数组,或者借用数组原型上的slice方法,将this变为arguments,实现类数组转化为数组
两种方法的比较:
var arr = [];
for(var i=0;i<arguments.length;i++){
arr[arr.length] = arguments[i];
}
//模拟slice方法复制数组
Array.prototype.mySlice = function(){
var arr = [];
for(var i=0;i<this.length;i++){
arr[arr.length] = this[i];
}
return arr;
};
由此可以得出将slice方法中的this替换为arguments即可,得出
Array.prototype.slice.call(arguments);
类数组使用数组的方法,需要转化
function avg(){
Array.prototype.sort.call(arguments,function(a,b){return a-b;});
[].pop.call(arguments);
[].shift.call(arguments);
return (eval([].join.call(arguments,"+"))/arguments.length).toFixed(2);
};
var res = avg(1,4,2,6,3,6,8,7,4,9);
console.log(res);
Number.toFixed(2) 保留小数两位