简体   繁体   中英

How to get the min and max of an array of numbers in javascript?

What is the best way to get the min and max of an array into two variables? My current method feels lengthy:

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]
  }
}

Other posts that appear to 'address' this seem to be old and I feel like there must be a better way in 2017.

You can just use Math.max() and Math.min()

For an array input, you can do

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

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

You can use reduce() and find both min and max at the same time.

 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) 

As an alternative, use Lodash min and max functions.

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

And take a look at minBy and maxBy functions which also could be very useful.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM