sortBy.js 781 B

12345678910111213141516171819202122232425262728
  1. var safeCb = require('./safeCb');
  2. var pluck = require('./pluck');
  3. var map = require('./map');
  4. var isUndef = require('./isUndef');
  5. exports = function(obj, iteratee, ctx) {
  6. iteratee = safeCb(iteratee, ctx);
  7. var idx = 0;
  8. return pluck(
  9. map(obj, function(val, key) {
  10. return {
  11. val: val,
  12. idx: idx++,
  13. criteria: iteratee(val, key, obj)
  14. };
  15. }).sort(function(left, right) {
  16. var a = left.criteria;
  17. var b = right.criteria;
  18. if (a !== b) {
  19. if (a > b || isUndef(a)) return 1;
  20. if (a < b || isUndef(b)) return -1;
  21. }
  22. return left.idx - right.idx;
  23. }),
  24. 'val'
  25. );
  26. };
  27. module.exports = exports;