Max value of a multidimensional array javascript

前端 未结 7 2306
太阳男子
太阳男子 2021-02-09 18:35

I have a multidimensional array of x columns and y rows. How can I find the min and the max value of the matrix? Example:

[[1,  37.8, 80.8, 41.8],
[2,  30.9, 69.         


        
相关标签:
7条回答
  • 2021-02-09 19:23

    You can also achieve this with a reduction (it's slower but if the array is not huge, it doesn't matter) resulting in a object containing both the min and the max like so:

    matrix.reduce(function (res, item) {
        item.forEach(function (val) {
            if (!res.hasOwnProperty('max') || val > res.max) res.max = val;
            if (!res.hasOwnProperty('min') || val < res.min) res.min = val;
        });
        return res;
    }, {});
    
    0 讨论(0)
  • 2021-02-09 19:26

    let

    var arr = [[2,3], [4,5]]; // a multidimensional array
    

    then get an array with each row's maximum with

    var maxRow = arr.map(function(row){ return Math.max.apply(Math, row); });
    

    and the overal maximum with

    var max = Math.max.apply(null, maxRow);
    
    0 讨论(0)
  • 2021-02-09 19:26

    Regardless of the dimension of the array, i believe this is the way to get the max of all primitives involved.

    function getMax(a){
      return Math.max(...a.map(e => Array.isArray(e) ? getMax(e) : e));
    }
    
    var arr = [[1,  37.8, 80.8, 41.8],
               [2,  30.9, 69.5, 32.4],
               [3,  25.4,   57, 25.7],
               [4,  11.7, 18.8, 10.5],
               [5,  11.9, 17.6, 10.4],
               [6,   8.8, 13.6,  7.7],
               [7,   7.6, 12.3,  9.6],
               [8,  12.3, 29.2, 10.6],
               [9,  16.9, 42.9, 14.8],
               [10, 12.8, 30.9, 11.6],
               [11,  5.3,  7.9,  4.7],
               [12,  6.6,  8.4,  5.2],
               [13,  4.8,  6.3,  3.6],
               [14,  4.2,  6.2,  3.4]];
     console.log(getMax(arr));

    It should work on arrays with indefinite dimension.

    function getMax(a){
      return Math.max(...a.map(e => Array.isArray(e) ? getMax(e) : e));
    }
    
    var arr = [[1,  37.8, 80.8, 41.8],
               [2,  30.9, 69.5, 32.4],
               [3,  25.4,   57, 25.7],
               [4,  11.7, 18.8, 10.5],
               [5,  11.9, 17.6, 10.4],
               [6,   8.8, 13.6,  7.7],
               [7,   7.6, 12.3,  9.6],
               [8,  12.3, 29.2, 10.6],
               [9,  16.9, 42.9, 14.8],
               [10, 12.8, 30.9, 11.6],
               [11,  5.3,  [6.1,[56.7,[98.55]]],  4.7],
               [12,  6.6,  8.4,  5.2],
               [13,  4.8,  6.3,  3.6],
               [14,  4.2,  6.2,  3.4]];
     console.log(getMax(arr));

    0 讨论(0)
  • 2021-02-09 19:30

    The solution using Array.prototype.push, Math.min and Math.max methods:

    // arr is your initial array
    var flattened = [], minValue, maxValue;
    arr.forEach(function (v) {
        Array.prototype.push.apply(flattened, v);
    });
    
    minValue = Math.min.apply(null, flattened);
    maxValue = Math.max.apply(null, flattened);
    
    console.log('min: ' + minValue, 'max: ' + maxValue);  // min: 1 max: 80.8
    

    DEMO link

    0 讨论(0)
  • 2021-02-09 19:32

    based on this answer, you can do it in 1 line (assuming ES6):

    const arr = [[12,45,75], [54,45,2],[23,54,75,2]];
    
    const max = Math.max(...[].concat(...arr));
    
    const min = Math.min(...[].concat(...arr));
    
    console.log(max);
    
    console.log(min);
    
    0 讨论(0)
  • 2021-02-09 19:36

    You can get max value of multi dimension array using following method:

    var arr = [[1, 5,6], [4, 7,8], [3, 8,20], [2, 3,1],[12, 4,5]];
    
    console.log(Math.max.apply(Math, arr.map(function (i) {
        return i[0]+i[1]+i[2];
    })));
    

    It first use array.map() to convert the multi-dimensional array to a flat one, and after that use Math.max().

    0 讨论(0)
提交回复
热议问题