我有一个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]
答案 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.push
,Math.min
和Math.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
答案 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);