思路:確定數組中最大最小值(排序查找arr.sort()/Math.max()方法)---->確定最大最小值位置(循環遍歷)---->移除最大最小值(可借助數組方法splice(i,1))
主要矛盾是確定數組中的最大值最小值,方法很多,包括但不限於:遍歷比較查找、sort()排序查找、Math.max()/min()方法。
遍歷比較查找不難,這里就不講了,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的方法通過操作展開符實現。
let max = Math.max.apply({}, this); let min = Math.min.apply({}, this); let max = Math.max(...arr); let min = Math.min(...arr);
后面通過循環遍歷確定最大最小值位置以及移除最大最小值就很簡單了。
接下來我們既可以將以上行為封裝在函數中,也可以對Array原生對象進行擴展。
1. 對Array原生對象進行擴展----給Array.prototype增加一個delMaxMin方法
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. 封裝在函數體內
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);