32 lines
772 B
JavaScript
32 lines
772 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 } |