如何在javascript中获取数组的最小值和最大值?

时间:2017-04-24 22:16:18

标签: 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]
  }
}

其他似乎在地址上发布的帖子&#39;这似乎已经过时了,我觉得2017年必须有更好的方式。

3 个答案:

答案 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 minmax函数。

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函数,这些函数也非常有用。