Find the min/max element of an Array in JavaScript

前端 未结 30 2918
無奈伤痛
無奈伤痛 2020-11-21 06:18

How can I easily obtain the min or max element of a JavaScript Array?

Example Psuedocode:

let array = [100, 0, 50]

array.min() //=> 0
array.max()         


        
30条回答
  •  南旧
    南旧 (楼主)
    2020-11-21 06:47

    Alternative Methods


    The Math.min and Math.max methods are both recursive operations that being added to the JS engine's call stack, and most likely crash for an array that contains large number of items
    (more than ~10⁷ items, depends on the user's browser).

    Math.max(...Array(1000000).keys());

    Uncaught RangeError: Maximum call stack size exceeded

    Instead, use something like so:

    arr.reduce((max, val) => max > val ? max : val, arr[0])
    

    Or with better run-time:

    function maxValue(arr) {
      let max = arr[0];
    
      for (let val of arr) {
        if (val > max) {
          max = val;
        }
      }
      return max;
    }
    

    Or to get both Min and Max:

    function getMinMax(arr) {
      return arr.reduce(({min, max}, v) => ({
        min: min < v ? min : v,
        max: max > v ? max : v,
      }), { min: arr[0], max: arr[0] });
    }
    

    Or with even better run-time*:

    function getMinMax(arr) {
      let min = arr[0];
      let max = arr[0];
      let i = arr.length;
        
      while (i--) {
        min = arr[i] < min ? arr[i] : min;
        max = arr[i] > max ? arr[i] : max;
      }
      return { min, max };
    }
    

    * Tested with 1,000,000 items:
    Just for a reference, the 1st function run-time (on my machine) was 15.84ms vs 2nd function with only 4.32ms.

提交回复
热议问题