Reputation: 1300
If I have an array like this:
array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]
I need to find max and min values from this array. In this case, max = 33, min = 0
I saw examples of array reduce, but I don't want to find max value for particular index of the inner array.
Upvotes: 7
Views: 1716
Reputation: 21
min = max = array[0][0]
for (i in array)
for (j in array[i]) {
if (array[i][j] > max) max = array[i][j]
if (array[i][j] < min) min = array[i][j]
}
Upvotes: 1
Reputation: 2404
Without jquery, using this answer to add max and min to arrays:
Array.prototype.max = function() {
return Math.max.apply(null, this);
};
Array.prototype.min = function() {
return Math.min.apply(null, this);
};
The answer becomes:
arr = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]]
maxm = arr.map(function(a){return a.max()}).max();
minm = arr.map(function(a){return a.min()}).min();
Upvotes: 2
Reputation: 59232
You can do this:
var array=[[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]];
var newArr=array.join().replace(/\[\]/,"").split(',').map(function(x){return +x});
Math.max.apply(null,newArr); // 33
Math.min.apply(null,newArr); // 0
Upvotes: 2
Reputation: 3125
Here is pure JS based solution. Without jQuery:
var flattened = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]].reduce(function(a, b) {
return a.concat(b);
});
Math.max.apply(null, flattened) //33
Math.min.apply(null, flattened) // 0
Upvotes: 2
Reputation: 4486
With underscorejs:
var array = [[1, 5, 8, 9], [3, 7], [3, 8, 33], [2], [0, 6]];
var max = _.chain(array)
.flatten()
.max()
.value()
Pretty self explanatory to get min.
Upvotes: 0
Reputation: 152216
Just try with:
var flat = [];
$.map(array, function(item){ $.merge(flat, item); });
// or merge arrays using `join` and `split`
var flat = array.join().split(',');
var max = Math.max.apply( Math, flat ),
min = Math.min.apply( Math, flat );
Upvotes: 10