2017-04-24 99 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功能,这也可能是非常有用的。

相关问题