Skip to main content
1 of 2
congusbongus
  • 15.1k
  • 8
  • 82
  • 105

I'd like to explain the terse accepted answer step-by-step:

var objects = [{ x: 3 }, { x: 1 }, { x: 2 }]; // array.map lets you extract an array of attribute values var xValues = objects.map(function(o) { return o.x; }); // es6 xValues = Array.from(objects, o => o.x); // function.apply lets you expand an array argument as individual arguments // So the following is equivalent to Math.max(3, 1, 2) // The first argument is "this" but since Math.max doesn't need it, null is fine var xMax = Math.max.apply(null, xValues); // es6 xMax = Math.max(...xValues); // Finally, to find the object that has the maximum x value (note that result is array): var maxXObjects = objects.filter(function(o) { return o.x === xMax; }); // Altogether xMax = Math.max.apply(null, objects.map(function(o) { return o.x; })); var maxXObject = objects.filter(function(o) { return o.x === xMax; })[0]; // es6 xMax = Math.max(...Array.from(objects, o => o.x)); maxXObject = objects.find(o => o.x === xMax); document.write('<p>objects: ' + JSON.stringify(objects) + '</p>'); document.write('<p>xValues: ' + JSON.stringify(xValues) + '</p>'); document.write('<p>xMax: ' + JSON.stringify(xMax) + '</p>'); document.write('<p>maxXObjects: ' + JSON.stringify(maxXObjects) + '</p>'); document.write('<p>maxXObject: ' + JSON.stringify(maxXObject) + '</p>');

Further information:

congusbongus
  • 15.1k
  • 8
  • 82
  • 105