sortby/index.js

32 lines
775 B
JavaScript

const sortby = (...properties) => (a, b) => {
// 'base' treat accent as there base character
const collator = new Intl.Collator('en', { numeric: true, sensitivity: 'base' })
// if items is {prop1:value1, prop2:value2}
// then sort(['prop1', 'desc', 'prop2'])
// will sort by prop1 desc and prop2
for (let i = 0; i < properties.length; i++) {
const property = properties[i]
let order = -1
if (i + 1 < properties.length) {
const next = properties[i + 1]
if (next === 'desc') {
order = 1
i++
} else if (next === 'asc') {
i++
}
}
const compare = collator.compare(a[property], b[property])
if (compare < 0) return order
if (compare > 0) return -order
}
return 0
}
export { sortby }