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