求数组的最小数、最大值,求一组数的平均数,sort函数详解,类数组转数组

软件设计 2017-05-21

求数组的最小值和最大值

//求数组当中最大值和最小值
 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30];
 //第一种方法     根据排序方法来求最大值和最小值     从小到大排序  第0位就是最小值   最后一位就是最大值
 arr.sort(function(a,b){
      return a-b;    //按从小大的情况排序
      //return b-a;    按从大到小的情况排序
 })
 console.log(arr);
 var min=arr[0];
 var max=arr[arr.length-1];
 console.log(min,max);// 1,456
 
 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30];
 //第二种方法   根据每个数组元素进行比较   假设第一个最大或最小   然后跟后面的元素进行比较
 var min=arr[0];
 var max=arr[0];
 for(var i=0;i<arr.length;i++){
     arr[i]<min?min=arr[i]:min;
     arr[i]>max?max=arr[i]:max;
 }
 console.log(min,max);  // 1,456
 
 //第三种方法  根据Math.max,Math.min以及apply传参
 var min=Math.min.apply(window,arr);
 var max=Math.max.apply(window,arr);
 console.log(min,max);
 
 //第四种方法   根据Math.max,Math.min和evel
 //eval('string')  转换字符串成表达式
 var min=eval('Math.min('+arr.toString()+')');
 var max=eval('Math.max('+arr.toString()+')');
 console.log(min,max);

写一个函数,功能就是求参数中的平均数,里面涉及到arguments这个类数组   并且把这个类数组转换成数组   然后利用数组的方法进行求平均数

//求一组数的平均数,去掉最小数和最大数   求数组的平均数
 //利用数组原型链上的slice克隆数组功能及call改变this,以及sort进行排序去掉最大值及最小值
 function avgFn(){
     var arr=Array.prototype.slice.call(arguments); //借用slice克隆的功能把arguments这个类数组转换成数组
     arr.sort(function(a,b){
         return a-b;
     })
     arr.shift(); //去除数组的首位
     arr.pop();  //去除数组的尾位
     return (eval(arr.join('+'))/arr.length).toFixed(2);
 }
 console.log(avgFn(8.0,3.0,5.0,4.0,5.5,6.5,8,4.0,5.5));

再写一种方法    更加对call的用法的理解  以及对类数组转换成数组的理解

function avgFn(){
     Array.prototype.sort.call(arguments,function(a,b){
         return a-b;
     });
     Array.prototype.shift.call(arguments);
     Array.prototype.pop.call(arguments);
     return (eval(Array.prototype.join.call(arguments,'+'))/arguments.length).toFixed(2);
 }
 console.log(avgFn(8.0,3.0,5.0,4.0,5.5,6.5,8,4.0,5.5));

再写点注意的事情:在IE6至IE8中    对 arguments 这个类数组转换成数组是兼容的   但对元素集合以及节点集合这样的类数组存在不兼容   那么怎么办呢   老老实实用for循环吧   那么怎么去兼容页面吗?可以  用  try{} catch(e){}    这个来判断是非兼容。

再细讲一下sort方法吧

var arr=[2,3,45,6,45,67,56,6,56,789,55,45,43,45];
 //arr.sort();   这个方法只对10以内的数字才会有效  比如说   它会认为8>76
 arr.sort(function(a,b){
     return a-b;  //意思就是从小排到大   用另外一种意思理解  就是  return  大于0的   就是从小排到大  ,小于0   就是大排到小
     //如果想打乱一个数组  那么return  Math.random()-0.5    就OK了。
 })
 //ok,都是一些数字的排序  有啥意思  如果是中文字符串呢   那么怎么排序呢   
 //那就放神器了   localeCompare()   这个就是可以把中文字符串转换成拼音字符串然后进行比较   前面字符串小于括号中的字符串那就是返回1  还是看代码吧
 arr=['徐文童鞋','博客园童鞋','张三','李四'];
 arr.sort(function(a,b){
     return a.localeCompare(b);
 })
 console.log(arr);//(4) ["博客园童鞋", "张三", "徐文童鞋", "李四"]

相关推荐