Guest User

Untitled

a guest
Dec 12th, 2018
57
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.06 KB | None | 0 0
  1. export function compareByField(field, reverse, predicate) {
  2. const key = predicate ? x => predicate(x[field]) : x => x[field]
  3. reverse = !reverse ? 1 : -1
  4.  
  5. return (a, b) => {
  6. const key_a = key(a)
  7. const key_b = key(b)
  8.  
  9. return reverse * ((key_a > key_b) - (key_b > key_a))
  10. }
  11. }
  12.  
  13. /*
  14. Params description:
  15.  
  16. sortingRules = [
  17. {columnName: 'field1', 'direction': 'asc'},
  18. {columnName: 'field2', 'direction': 'desc'},
  19. ]
  20. predicates = {
  21. 'field1': (value) => value.toLowerCase()
  22. }
  23. */
  24. export function compareByMultipleFields(sortingRules, predicates) {
  25. let comparators = sortingRules.map(sortingRule => {
  26. return compareByField(
  27. sortingRule.columnName,
  28. sortingRule.direction === 'desc',
  29. predicates[sortingRule.columnName] || null
  30. )
  31. })
  32.  
  33. return (a, b) => {
  34. for (let comparator of comparators) {
  35. const comparisonResult = comparator(a, b)
  36. if (comparisonResult !== 0) return comparisonResult
  37. }
  38. return 0
  39. }
  40. }
Add Comment
Please, Sign In to add comment