如何讓數(shù)組取最大值與最小值的方法討論
在一個(gè)數(shù)組中,如何取最大值與最小值有很多種方法,這里我們將從最笨的方法講起,然后講述改進(jìn)后的方法。
原型是個(gè)好東西,通常除了Object的原型不應(yīng)該擴(kuò)展,向原型添加新方法是很好的選擇。
我們看一下如何為數(shù)組取最大值與最小值。最笨的方法估計(jì)是這樣:
01.
Array.prototype.max =
function
() {
02.
var
max =
this
[0];
03.
var
len =
this
.length;
04.
for
(
var
i = 1; i < len; i++){
05.
if
(
this
[i] > max) {
06.
max =
this
[i];
07.
}
08.
}
09.
return
max;
10.
}
11.
Array.prototype.min =
function
() {
12.
var
min =
this
[0];
13.
var
len =
this
.length;
14.
for
(
var
i = 1; i < len; i++){
15.
if
(
this
[i] < min){
16.
min =
this
[i];
17.
}
18.
}
19.
return
min;
20.
}
如果你是引入類庫進(jìn)行工作,害怕類庫也實(shí)現(xiàn)了同名的原型方法,我們可以在生成之前進(jìn)行判斷:
1.
if
(
typeof
Array.prototype[
'max'
] ==
'undefined'
) {
2.
Array.prototype.max =
function
() {
3.
//************略*************
4.
}
5.
}
但這兩個(gè)擴(kuò)展實(shí)現(xiàn)得的確不怎么樣?!有什么原生的方法可以給我們用一用呢?John Resig巧妙地利用apply方法來調(diào)用原生的Math.max與Math.min方法迅速求得結(jié)果。apply能讓一個(gè)方法指定調(diào)用對象與傳入?yún)?shù),并且傳入?yún)?shù)是以數(shù)組形式組織的。恰恰現(xiàn)在有一個(gè)方法叫Math.max,調(diào)用對象為Math,與多個(gè)參數(shù)。
1.
Array.max =
function
( array ){
2.
return
Math.max.apply( Math, array );
3.
};
4.
5.
Array.min =
function
( array ){
6.
return
Math.min.apply( Math, array );
7.
};
不過,John Resig是把它們做成Math對象的靜態(tài)方法,不能使用大神最愛用的鏈?zhǔn)秸{(diào)用了。但這方法還能更精簡一些,不要忘記,Math對象也是一個(gè)對象,我們用對象的字面量來寫,又可以省幾個(gè)比特了。
1.
Array.prototype.max =
function
(){
2.
return
Math.max.apply({},
this
)
3.
}
4.
Array.prototype.min =
function
(){
5.
return
Math.min.apply({},
this
)
6.
}
1.
[1,2,3].max()
// => 3
2.
[1,2,3].min()
// => 1
【編輯推薦】