max-by.js 937 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. var isArray = require('../type/is-array');
  2. var isFunction = require('../type/is-function');
  3. var each = require('../each');
  4. /**
  5. * @param {Array} arr The array to iterate over.
  6. * @param {Function} [fn] The iteratee invoked per element.
  7. * @return {*} Returns the maximum value.
  8. * @example
  9. *
  10. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  11. *
  12. * maxBy(objects, function(o) { return o.n; });
  13. * // => { 'n': 2 }
  14. *
  15. * maxBy(objects, 'n');
  16. * // => { 'n': 2 }
  17. */
  18. var maxBy = function maxBy(arr, fn) {
  19. if (!isArray(arr)) {
  20. return undefined;
  21. }
  22. var max = arr[0];
  23. var maxData = void 0;
  24. if (isFunction(fn)) {
  25. maxData = fn(arr[0]);
  26. } else {
  27. maxData = arr[0][fn];
  28. }
  29. var data = void 0;
  30. each(arr, function (val) {
  31. if (isFunction(fn)) {
  32. data = fn(val);
  33. } else {
  34. data = val[fn];
  35. }
  36. if (data > maxData) {
  37. max = val;
  38. maxData = data;
  39. }
  40. });
  41. return max;
  42. };
  43. module.exports = maxBy;