2017-04-24 101 views
2

將數組的最小值和最大值變爲兩個變量的最佳方法是什麼? 我現在的感覺的方法冗長:如何在javascript中獲取數組的最小值和最大值?

出現「地址」這似乎是老
var mynums = [0,0,0,2,3,4,23,435,343,23,2,34,34,3,34,3,2,1,0,0,0] 
var minNum = null; 
var maxNum = null; 
for(var i = 0; i < mynums.length; i++) { 
    if(!minNum) { 
    minNum = minNum[i]; 
    maxNum = maxNum[i]; 
    } else if (mynums[i] < minNum) { 
    minNum = mynums[i]; 
    } else if (mynums[i] > minNum && mynums[i] > maxNum) { 
    maxNum = mynums[i] 
    } 
} 

其他職位,我覺得必須有在2017年

+0

可能重複[JavaScript:最小和最大數組值?](http://stackoverflow.com/questions/1669190/javascript-min-max-array-values) – dave

回答

5

一個更好的方式,您可以只使用Math.max()Math.min()

對於數組輸入,你可以做

var maxNum = Math.max.apply(null, mynums); 

var minNum = Math.min.apply(null, mynums); 
+0

var mynums = [0,0,0, 2,3,4,23,435,343,23,2,34,34,3,34,3,2,1,0,0,0]; Math.max(mynums); //返回一個NaN。 – Rolando

+1

爲陣列添加了解決方案。 – user6731765

+0

爲什麼你必須使用apply/null? – Rolando

0

您可以使用reduce(),並找到兩個分鐘和最大值。

var mynums = [0, 0, 0, 2, 3, 4, 23, 435, 343, 23, 2, 34, 34, 3, 34, 3, 2, 1, 0, 0, 0] 
 

 
var {min, max} = mynums.reduce(function(r, e, i) { 
 
    if(i == 0) r.max = e, r.min = e; 
 
    if(e > r.max) r.max = e; 
 
    if(e < r.min) r.min = e; 
 
    return r; 
 
}, {}) 
 

 
console.log(min) 
 
console.log(max)

0

作爲替代方案,可以使用Lodashminmax功能。

var mynums = [0,0,0,2,3,4,23,435,343,23,2,34,34,3,34,3,2,1,0,0,0]; 
var minNum = _.min(mynums); // 0 
var maxNum = _.max(maxNum); // 435 

而且看看minBymaxBy功能,這也可能是非常有用的。

相關問題