Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- export function compareByField(field, reverse, predicate) {
- const key = predicate ? x => predicate(x[field]) : x => x[field]
- reverse = !reverse ? 1 : -1
- return (a, b) => {
- const key_a = key(a)
- const key_b = key(b)
- return reverse * ((key_a > key_b) - (key_b > key_a))
- }
- }
- /*
- Params description:
- sortingRules = [
- {columnName: 'field1', 'direction': 'asc'},
- {columnName: 'field2', 'direction': 'desc'},
- ]
- predicates = {
- 'field1': (value) => value.toLowerCase()
- }
- */
- export function compareByMultipleFields(sortingRules, predicates) {
- let comparators = sortingRules.map(sortingRule => {
- return compareByField(
- sortingRule.columnName,
- sortingRule.direction === 'desc',
- predicates[sortingRule.columnName] || null
- )
- })
- return (a, b) => {
- for (let comparator of comparators) {
- const comparisonResult = comparator(a, b)
- if (comparisonResult !== 0) return comparisonResult
- }
- return 0
- }
- }
Add Comment
Please, Sign In to add comment