如何為數(shù)組取最大值與最小值。最笨的方法估計(jì)是這樣:
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;
}
如果你是引入類庫(kù)進(jìn)行工作,害怕類庫(kù)也實(shí)現(xiàn)了同名的原型方法,我們可以在生成之前進(jìn)行判斷:
if (typeof Array.prototype['max'] == 'undefined') {
Array.prototype.max = function() {
//************略*************
}
}
但這兩個(gè)擴(kuò)展實(shí)現(xiàn)得的確不怎么樣?!有什么原生的方法可以給我們用一用呢?John Resig巧妙地利用apply方法來(lái)調(diào)用原生的Math.max與Math.min方法迅速求得結(jié)果。apply能讓一個(gè)方法指定調(diào)用對(duì)象與傳入?yún)?shù),并且傳入?yún)?shù)是以數(shù)組形式組織的。恰恰現(xiàn)在有一個(gè)方法叫Math.max,調(diào)用對(duì)象為Math,與多個(gè)參數(shù)。
Array.max = function( array ){
return Math.max.apply( Math, array );
};
Array.min = function( array ){
return Math.min.apply( Math, array );
};
不過,John Resig是把它們做成Math對(duì)象的靜態(tài)方法,不能使用大神最愛用的鏈?zhǔn)秸{(diào)用了。但這方法還能更精簡(jiǎn)一些,不要忘記,Math對(duì)象也是一個(gè)對(duì)象,我們用對(duì)象的字面量來(lái)寫,又可以省幾個(gè)比特了。
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