1. 程式人生 > 實用技巧 >Js陣列取最大值與最小值

Js陣列取最大值與最小值

原型是個好東西,通常除了Object的原型不應該擴充套件,向原型新增新方法是很好的選擇。

我們看一下如何為陣列取最大值與最小值。最笨的方法估計是這樣:

Array.prototype.max = function() {
var max = this[0];
var len = this.length;
for (var i = 1; i < len; i++){
if (this[i] > max) {
max = this[i];
}
}
return max;
}
Array.prototype.min = function() {
var min = this[0];
var len = this.length;
for (var i = 1; i < len; i++){
if (this[i] < min){
min = this[i];
}
}
return min;
}

如果你是引入類庫進行工作,害怕類庫也實現了同名的原型方法,我們可以在生成之前進行判斷:

if (typeof Array.prototype['max'] == 'undefined') {
Array.prototype.max = function() {
//************略*************
}
}

但這兩個擴充套件實現得的確不怎麼樣?!有什麼原生的方法可以給我們用一用呢?John Resig巧妙地利用apply方法來呼叫原生的Math.max與Math.min方法迅速求得結果。apply能讓一個方法指定呼叫物件與傳入引數,並且傳入引數是以陣列形式組織的。恰恰現在有一個方法叫Math.max,呼叫物件為Math,與多個引數。

Array.max = function( array ){
return Math.max.apply( Math, array );
};

Array.min = function( array ){
return Math.min.apply( Math, array );
};

廣州品牌設計公司https://www.houdianzi.com PPT模板下載大全https://redbox.wode007.com

不過,John Resig是把它們做成Math物件的靜態方法,不能使用大神最愛用的鏈式呼叫了。但這方法還能更精簡一些,不要忘記,Math物件也是一個物件,我們用物件的字面量來寫,又可以省幾個位元了。

Array.prototype.max = function(){
return Math.max.apply({},this)
}
Array.prototype.min = function(){
return Math.min.apply({},this)
}
[1,2,3].max()// => 3
[1,2,3].min()// => 1