min-by.js 997 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import each from './each';
  2. import isArray from './is-array';
  3. import isFunction from './is-function';
  4. /**
  5. * @param {Array} arr The array to iterate over.
  6. * @param {Function} [fn] The iteratee invoked per element.
  7. * @return {*} Returns the minimum value.
  8. * @example
  9. *
  10. * var objects = [{ 'n': 1 }, { 'n': 2 }];
  11. *
  12. * minBy(objects, function(o) { return o.n; });
  13. * // => { 'n': 1 }
  14. *
  15. * minBy(objects, 'n');
  16. * // => { 'n': 1 }
  17. */
  18. export default (function (arr, fn) {
  19. if (!isArray(arr)) {
  20. return undefined;
  21. }
  22. var min = arr[0];
  23. var minData;
  24. if (isFunction(fn)) {
  25. minData = fn(arr[0]);
  26. }
  27. else {
  28. minData = arr[0][fn];
  29. }
  30. var data;
  31. each(arr, function (val) {
  32. if (isFunction(fn)) {
  33. data = fn(val);
  34. }
  35. else {
  36. data = val[fn];
  37. }
  38. if (data < minData) {
  39. min = val;
  40. minData = data;
  41. }
  42. });
  43. return min;
  44. });
  45. //# sourceMappingURL=min-by.js.map