max-by.js 815 B

123456789101112131415161718192021222324252627282930313233
  1. import isArray from './is-array';
  2. import isFunction from './is-function';
  3. /**
  4. * @param {Array} arr The array to iterate over.
  5. * @param {Function} [fn] The iteratee invoked per element.
  6. * @return {*} Returns the maximum value.
  7. * @example
  8. *
  9. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  10. *
  11. * maxBy(objects, function(o) { return o.n; });
  12. * // => { 'n': 2 }
  13. *
  14. * maxBy(objects, 'n');
  15. * // => { 'n': 2 }
  16. */
  17. export default (function (arr, fn) {
  18. if (!isArray(arr)) {
  19. return undefined;
  20. }
  21. var maxItem;
  22. var max = -Infinity;
  23. for (var i = 0; i < arr.length; i++) {
  24. var item = arr[i];
  25. var v = isFunction(fn) ? fn(item) : item[fn];
  26. if (v > max) {
  27. maxItem = item;
  28. max = v;
  29. }
  30. }
  31. return maxItem;
  32. });
  33. //# sourceMappingURL=max-by.js.map