sortby/index.js

25 lines
629 B
JavaScript
Raw Normal View History

2023-09-11 10:31:30 -04:00
const sortby = (properties) => (a, b) => {
2023-09-28 22:53:58 -04:00
const collator = new Intl.Collator('en', { numeric: true, sensitivity: 'base' })
2023-09-11 10:31:30 -04:00
// if items is {prop1:value1, prop2:value2}
// then sort(['prop1', 'desc', 'prop2'])
// will sort by prop1 desc and prop2
2023-09-28 22:51:48 -04:00
for (let i = 0; i < properties.length; i++) {
const property = properties[i]
2023-09-11 10:31:30 -04:00
let order = -1
if (i + 1 < properties.length && properties[i + 1] === 'desc') {
order = 1
i++
}
const compare = collator.compare(a[property], b[property])
2023-09-19 12:10:17 -04:00
if (compare < 0) return order
2023-09-19 16:26:37 -04:00
if (compare > 0) return -order
2023-09-11 10:31:30 -04:00
}
return 0
}
export { sortby }