JS去掉數組中的最大值最小值

    思路:肯定數組中最大最小值(排序查找arr.sort()/Math.max()方法)---->肯定最大最小值位置(循環遍歷)---->移除最大最小值(可藉助數組方法splice(i,1))數組

    主要矛盾是肯定數組中的最大值最小值,方法不少,包括但不限於:遍歷比較查找、sort()排序查找、Math.max()/min()方法。app

    遍歷比較查找不難,這裏就不講了,sort排序用法以下,主要須要注意升序仍是降序。函數

let max = arr.sort(function(a,b){

    return b-a; // b-a從大到小,a-b從小到大

})[0];

    

    內置函數Math.max()Math.min()能夠找出參數中的最大值和最小值,但對於數字組成的數組是不能用的。可是,Function.prototype.apply()讓你能夠使用提供的this與參數組成的_數組(array)_來調用函數。給apply()第二個參數傳遞numbers數組,等於使用數組中的全部值做爲函數的參數。還有就是經過基於ES6的方法經過操做展開符實現。this

     

let max = Math.max.apply({}, this);
let min = Math.min.apply({}, this);

let max = Math.max(...arr);
let min = Math.min(...arr);

    後面經過循環遍歷肯定最大最小值位置以及移除最大最小值就很簡單了。spa

   

    接下來咱們既能夠將以上行爲封裝在函數中,也能夠對Array原生對象進行擴展。prototype

    1. 對Array原生對象進行擴展----給Array.prototype增長一個delMaxMin方法code

Array.prototype.deleMaxMin = function () {
  let max = Math.max.apply({}, this);
  let min = Math.min.apply({}, this);
  for(let i=0; i<this.length;i++) {
    if(this[i] == max)
    {this.splice(i,1)}
    if(this[i] == min)
    {this.splice(i,1)}
 }
  return this;
}

arr = [22, 6, 12, 44, 56, 99, 24, 36, 99, 6]

arr.delMxMin();

// [22, 12, 44, 56, 24, 36]

    注意調用方法形式爲 arr.delMxMin(); 對象

 

    2. 封裝在函數體內blog

function spliceMaxMin (arry){
    let result = arry.splice(0)
    let max = Math.max(...result)
    let min = Math.min(...result)
    for(var i = 0; i < result.length;i++){
        if(result[i] == max){
            result.splice(i,1)
        }
        if(result[i] ==min){
            result.splice(i,1)
        }
    }
    return result
}

arr = [22, 6, 12, 44, 56, 99, 24, 36, 99, 6]
spliceMaxMin (arr);  // [22, 12, 44, 56, 24, 36]

    注意調用方法爲 spliceMaxMin (arr); 排序