多维数组javascript的最大值

时间:2016-09-06 07:03:49

标签: javascript arrays multidimensional-array

我有一个x列和y行的多维数组。 如何找到矩阵的最小值和最大值? 实施例

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

7 个答案:

答案 0 :(得分:5)

您可以使用以下方法获取多维数组的最大值:

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

首先使用array.map()将多维数组转换为平面数组,然后使用Math.max()。

答案 1 :(得分:3)

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

然后使用

获取每行最大值的数组
var maxRow = arr.map(function(row){ return Math.max.apply(Math, row); });

的最大值
var max = Math.max.apply(null, maxRow);

答案 2 :(得分:3)

无论数组的维数如何,我相信这是获得所有原语最大化的方法。



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));




它应该适用于具有不确定维度的数组。



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));




答案 3 :(得分:2)

此处的大多数答案都使用apply或扩展运算符...来调用Math.max函数,并将数组的所有元素作为参数。

对于大型数组,使用reduce更安全:

// returns maximum of an array
const getArrayMax = array => array.reduce((a, b) => Math.max(a, b));

// returns maximum of a 2D array
const getArrayMax2d = array2d => getArrayMax(array2d.map(getArrayMax));

答案 4 :(得分:0)

使用Array.prototype.pushMath.minMath.max方法的解决方案:

// 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

答案 5 :(得分:0)

你也可以通过减少来实现这个目标(它的速度较慢,但​​是如果数组不是很大,则无关紧要)会导致一个包含最小值和最大值的对象,如下所示:

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;
}, {});

答案 6 :(得分:0)

基于this的答案,您可以在1行中完成(假设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);