Math.max 能夠實現獲得數組中最大的一項,支持Math.max(param1,param2,param3…),不支持Math.max([param1,param2]) 也就是數組, 可是能夠根據apply的能夠將數組解析爲參數列表來解決數組
var max=Math.max.apply(null,array),這樣輕易的能夠獲得一個數組中最大的一項app
這塊在調用的時候第一個參數給了一個null,這個是由於沒有對象去調用這個方法,我只須要用這個方法幫我運算,獲得返回的結果就行,.因此直接傳遞了一個null過去this
var max=Math.max.apply(null,array) 其實等價於Math.max(array),只是利用了apply 第二個參數是數組的特性prototype
var a=[1,2,13,5]; var b=Math.max.apply(null, a); alert(b);//13,對象
上面的{}能夠換成this 或 null或者{}it
多維數組io
var a=[1,2,3,[5,6],[1,4,8]]; var ta=a.join(",").split(","); //轉化爲一維數組function
alert(Math.max.apply(null,ta)); //最大值循環
alert(Math.min.apply(null,ta));//最小值方法
鏈式
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
也能夠 Array.prototype.max = function() { return Math.max.apply({},a) }
var a =[1,2,3]
a.max()
上面的Array.prototype.max 與Array.prototype.min 能夠隨便取名字
再好比數組的push方法。
var arr1=[1,3,4];
var arr2=[3,4,5];
若是咱們要把 arr2展開,而後一個一個追加到arr1中去,最後讓arr1=[1,3,4,3,4,5] arr1.push(arr2)顯然是不行的。
由於這樣作會獲得[1,3,4,[3,4,5]]
咱們只能用一個循環去一個一個的push(固然也能夠用arr1.concat(arr2),可是concat方法並不改變arr1自己)
var arrLen=arr2.length
for(var i=0;i<arrLen;i++){
arr1.push(arr2[i]);
}
自從有了Apply,事情就變得如此簡單
Array.prototype.push.apply(arr1,arr2)也能夠arr1.push.apply(arr1,arr2) alert(arr1)//[1,3,4,3,4,5]