将数组的最小值和最大值分成两个变量的最佳方法是什么? 我目前的方法感觉很冗长:
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]
}
}
其他似乎在地址上发布的帖子&#39;这似乎已经过时了,我觉得2017年必须有更好的方式。
答案 0 :(得分:5)
您可以使用Math.max()
和Math.min()
对于数组输入,您可以执行
var maxNum = Math.max.apply(null, mynums);
var minNum = Math.min.apply(null, mynums);
答案 1 :(得分: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)
答案 2 :(得分:0)
作为替代方案,请使用Lodash min
和max
函数。
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
然后查看minBy
和maxBy
函数,这些函数也非常有用。