I have an array that looks like the following:
array = [[1, 5], [4, 7], [3, 8], [2, 3],
[12, 4], [6, 6], [4, 1], [3, 2],
[8, 14]]
What I need is the largest number from the first value of the sets, so in this case 12
.
Looking at some examples online, the best way I saw to accomplish this is :
Math.max.apply Math, array
Problem is, this only works with single dimensional arrays. How would I impliment this for my senario? (jquery allowed)
The end solution:
It wasn't part of the question, but I needed both the min and max from the array, and that changes things a little.
unless device.IE
justTheDates = magnitudeArray.map (i) -> i[0]
@earliest = Math.min.apply Math, justTheDates
@latest = Math.max.apply Math, justTheDates
else
@earliest = magnitudeArray[0][0]
@latest = magnitudeArray[0][0]
for magnitudeItem in magnitudeArray
@earliest = magnitudeItem[0] if magnitudeItem[0] < @earliest
@latest = magnitudeItem[0] if magnitudeItem[0] > @latest
http://jsfiddle.net/zerkms/HM7es/
var max = Math.max.apply(Math, arr.map(function(i) {
return i[0];
}));
So at first you use array.map()
to convert the 2-dimensional array to a flat one, and after that use Math.max()
You can use .reduce()
...
array.reduce(function(max, arr) {
return Math.max(max, arr[0]);
}, -Infinity)
Here's a version that doesn't use Math.max
...
array.reduce(function(max, arr) {
return max >= arr[0] ? max : arr[0];
}, -Infinity);
...and a jsPerf test.
A simple solution using Underscore.js' max
that avoids generating an intermediate array:
max = _(array).max(_.first)[0]
(JSFiddle)
Using a comprehension in CoffeeScript:
Math.max.apply Math, (x[0] for x in array)
Running example
Also, look at _underscore.js. Here is a link to the function _max().
The best part about _underscore is that there are about another hundred helper functions similar to _max. Like sort.
Compare the syntax below:
var sortedObject = _.sortBy(object, function(val, key, object) {
return val;
});
They are easy to chain, and interpret! (Like Douglas Crockford might suggest)
An excellent JSFIDDLE, was provided in this post by @Raynos.
If you are consistently conducting array operations with raw JavaScript, check out _underscore.js, it can greatly simplify your code.
Hope that helps, All the best! Nash
Array.prototype.maxX = function(){
return Math.max.apply(Math,this.map(function(o){return o[0];}));
};
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With