求數組的最小數、最大值,求一組數的平均數,sort函數詳解,類數組轉數組

求數組的最小值和最大值數組

 1 //求數組當中最大值和最小值
 2 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30];
 3 //第一種方法     根據排序方法來求最大值和最小值     從小到大排序  第0位就是最小值   最後一位就是最大值
 4 arr.sort(function(a,b){
 5      return a-b;    //按從小大的狀況排序
 6      //return b-a;    按從大到小的狀況排序
 7 })
 8 console.log(arr);
 9 var min=arr[0];
10 var max=arr[arr.length-1];
11 console.log(min,max);// 1,456
12 
13 var arr=[3,2,6,1,45,23,456,23,2,6,3,45,37,89,30];
14 //第二種方法   根據每一個數組元素進行比較   假設第一個最大或最小   而後跟後面的元素進行比較
15 var min=arr[0];
16 var max=arr[0];
17 for(var i=0;i<arr.length;i++){
18     arr[i]<min?min=arr[i]:min;
19     arr[i]>max?max=arr[i]:max;
20 }
21 console.log(min,max);  // 1,456
22 
23 //第三種方法  根據Math.max,Math.min以及apply傳參
24 var min=Math.min.apply(window,arr);
25 var max=Math.max.apply(window,arr);
26 console.log(min,max);
27 
28 //第四種方法   根據Math.max,Math.min和evel
29 //eval('string')  轉換字符串成表達式
30 var min=eval('Math.min('+arr.toString()+')');
31 var max=eval('Math.max('+arr.toString()+')');
32 console.log(min,max);

寫一個函數,功能就是求參數中的平均數,裏面涉及到arguments這個類數組   而且把這個類數組轉換成數組   而後利用數組的方法進行求平均數app

 1 //求一組數的平均數,去掉最小數和最大數   求數組的平均數
 2 //利用數組原型鏈上的slice克隆數組功能及call改變this,以及sort進行排序去掉最大值及最小值
 3 function avgFn(){
 4     var arr=Array.prototype.slice.call(arguments); //借用slice克隆的功能把arguments這個類數組轉換成數組
 5     arr.sort(function(a,b){
 6         return a-b;
 7     })
 8     arr.shift(); //去除數組的首位
 9     arr.pop();  //去除數組的尾位
10     return (eval(arr.join('+'))/arr.length).toFixed(2);
11 }
12 console.log(avgFn(8.0,3.0,5.0,4.0,5.5,6.5,8,4.0,5.5));

再寫一種方法    更加對call的用法的理解  以及對類數組轉換成數組的理解dom

1 function avgFn(){
2     Array.prototype.sort.call(arguments,function(a,b){
3         return a-b;
4     });
5     Array.prototype.shift.call(arguments);
6     Array.prototype.pop.call(arguments);
7     return (eval(Array.prototype.join.call(arguments,'+'))/arguments.length).toFixed(2);
8 }
9 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方法吧this

 1 var arr=[2,3,45,6,45,67,56,6,56,789,55,45,43,45];
 2 //arr.sort();   這個方法只對10之內的數字纔會有效  好比說   它會認爲8>76
 3 arr.sort(function(a,b){
 4     return a-b;  //意思就是從小排到大   用另一種意思理解  就是  return  大於0的   就是從小排到大  ,小於0   就是大排到小
 5     //若是想打亂一個數組  那麼return  Math.random()-0.5    就OK了。
 6 })
 7 //ok,都是一些數字的排序  有啥意思  若是是中文字符串呢   那麼怎麼排序呢   
 8 //那就放神器了   localeCompare()   這個就是能夠把中文字符串轉換成拼音字符串而後進行比較   前面字符串小於括號中的字符串那就是返回1  仍是看代碼吧
 9 arr=['徐文童鞋','博客園童鞋','張三','李四'];
10 arr.sort(function(a,b){
11     return a.localeCompare(b);
12 })
13 console.log(arr);//(4) ["博客園童鞋", "張三", "徐文童鞋", "李四"]
相關文章
相關標籤/搜索