一:https://www.cnblogs.com/zhouyangla/p/8482010.htmljavascript
首先咱們給數組進行排序,能夠按照從小到大的順序來排,排序以後的數組中第一個和最後一個就是咱們想要獲取的最小值和最大值。css
排序咱們會用到數組的 sort 方法。html
var arr = [12,56,25,5,82,51,22]; arr.sort(function (a, b) { return a-b; }); // [5,12,22,25,51,56] var min = arr[0]; // 5 var max = arr[arr.length - 1]; // 56
假設當前數組中的第一個值是最大值,而後拿這個最大值和後面的項逐一比較,若是後面的某一個值比假設的值還大,說明假設錯了,咱們把假設的值進行替換。最後獲得的結果就是咱們想要的。java
// 獲取最大值: var arr = [22,13,6,55,30]; var max = arr[0]; for(var i = 1; i < arr.length; i++) { var cur = arr[i]; cur > max ? max = cur : null } console.log(max); // 55 // 獲取最小值: var arr = [22,13,6,55,30]; var min = arr[0]; for(var i = 1; i < arr.length; i++) { var cur = arr[i]; cur < min ? min = cur : null } console.log(min) // 6
可使用apply來實現。apply傳入的是一個數組。es6
var arr = [22,13,6,55,30]; var max = Math.max.apply(null, arr); var min = Math.min.apply(null, arr); console.log(max, min) // 55,6
var arr = [22,13,6,55,30]; console.log(arr.Math(...arr)); // 55
方法一:swift
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//最小值
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;
}
//最大值
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;
}
|
若是你是引入類庫進行開發,懼怕類庫也實現了同名的原型方法,能夠在生成函數以前進行重名判斷:數組
1
2
3
4
5
|
if
(
typeof
Array.prototype[
'max'
] ==
'undefined'
) {
Array.prototype.max =
function
() {
... ...
}
}
|
方法二:app
用Math.max和Math.min方法能夠迅速獲得結果。apply能讓一個方法指定調用對象與傳入參數,而且傳入參數是以數組形式組織的。偏偏如今有一個方法叫Math.max,調用對象爲Math,與多個參數函數
1
2
3
4
5
6
|
Array.max =
function
( array ){
return
Math.max.apply( Math, array );
};
Array.min =
function
( array ){
return
Math.min.apply( Math, array );
};
|
可是,John Resig是把它們作成Math對象的靜態方法,不能使用大神最愛用的鏈式調用了。但這方法還能更精簡一些,不要忘記,Math對象也是一個對象,咱們用對象的字面量來寫,又能夠省幾個比特了。ui
1
2
3
4
5
6
7
8
|
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
|
方法三:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
function
getMaximin(arr,maximin)
{
if
(maximin==
"max"
)
{
return
Math.max.apply(Math,arr);
}
else
if
(maximin==
"min"
)
{
return
Math.min.apply(Math, arr);
}
}
var
a=[3,2,4,2,10];
var
b=[12,4,45,786,9,78];
console.log(getMaximin(a,
"max"
));
//10
console.log(getMaximin(b,
"min"
));
//04
|
方法四:
1
2
3
|
var
a=[1,2,3,5];
alert(Math.max.apply(
null
, a));
//最大值
alert(Math.min.apply(
null
, a));
//最小值
|
多維數組能夠這麼修改:
1
2
3
4
|
var
a=[1,2,3,[5,6],[1,4,8]];
var
ta=a.join(
","
).split(
","
);
//轉化爲一維數組
alert(Math.max.apply(
null
,ta));
//最大值
alert(Math.min.apply(
null
,ta));
//最小值
|
3、https://blog.csdn.net/weixin_41646716/article/details/80961755
JavaScript 提供了 Math.max 函數返回一組數中的最大值,用法是:
Math.max([value1[,value2, ...]])
值得注意的是:
-Infinity
(注意是負無窮大)而咱們須要分析的是:
1.若是任一參數不能被轉換爲數值,這就意味着若是參數能夠被轉換成數字,就是能夠進行比較的,好比:
Math.max(true, 0) // 1
Math.max(true, '2', null) // 2
Math.max(1, undefined) // NaN
Math.max(1, {}) // NaN
2.若是沒有參數,則結果爲 -Infinity,對應的,Math.min 函數,若是沒有參數,則結果爲 Infinity,因此:
var min = Math.min();
var max = Math.max();
console.log(min > max);
瞭解了 Math.max 方法,咱們以求數組最大值的爲例,思考有哪些方法能夠實現這個需求。
最最原始的方法,莫過於循環遍歷一遍:
var arr = [6, 4, 1, 8, 2, 11, 23];
var result = arr[0];
for (var i = 1; i < arr.length; i++) {
result = Math.max(result, arr[i]);
}
console.log(result);
既然是經過遍歷數組求出一個最終值,那麼咱們就可使用 reduce 方法:
var arr = [6, 4, 1, 8, 2, 11, 23];
function max(prev, next) {
return Math.max(prev, next);
}
console.log(arr.reduce(max));
若是咱們先對數組進行一次排序,那麼最大值就是最後一個值:
var arr = [6, 4, 1, 8, 2, 11, 23];
arr.sort(function(a,b){return a - b;});
console.log(arr[arr.length - 1])
Math.max 支持傳多個參數來進行比較,那麼咱們如何將一個數組轉換成參數傳進 Math.max 函數呢?eval 即是一種
var arr = [6, 4, 1, 8, 2, 11, 23];
var max = eval("Math.max(" + arr + ")");
console.log(max)
使用 apply 是另外一種。
var arr = [6, 4, 1, 8, 2, 11, 23];
console.log(Math.max.apply(null, arr))
使用 ES6 的擴展運算符:
var arr = [6, 4, 1, 8, 2, 11, 23];
console.log(Math.max(...arr))
專題系列
JavaScript專題系列防抖、節流、去重、類型判斷、拷貝、最值、扁平、柯里、遞歸、亂序、排序等,特色是研(chao)究(xi) underscore 和 jQuery 的實現方式。
Math.max.apply(null,[9,8,55,66,49,68,109,55,33,6,2,1])
除此以外,還有不少數組排序方式,均可以在排序後,根據新數組索引值獲取 最大/最小 值。
多維數組能夠這麼修改: