Tiny, zero-dependency multi column sorting helper.
With npm:
$ npm i multi-column-sort
or with yarn:
$ yarn add multi-column-sort
import multiColumnSort from 'multi-column-sort'
const data = [
{ firstName: 'Richards', lastName: 'Shepard', balance: '$2,657.70' },
{ firstName: 'Bessie', lastName: 'Henry', balance: '$3,202.83' },
{ firstName: 'Richards', lastName: 'Hammond', balance: '$3,441.19' },
{ firstName: 'Allison', lastName: 'Church', balance: '$1,616.60' },
{ firstName: 'Bennett', lastName: 'Ferrell', balance: '$1,165.54' }
]
const getColumnValue = (column, value) => {
switch (column) {
case 'balance':
return parseFloat(value.replace(/\,|\$/g, ''))
default:
return value
}
}
const sorted = multiColumnSort(
data,
[
['firstName', 'ASC'],
['balance', 'DESC']
],
getColumnValue
)
/* Or: */
const sorted = multiColumnSort(
data,
{
firstName: 'ASC',
balance: 'DESC'
},
getColumnValue
)
/* sorted: [
{ firstName: 'Allison', lastName: 'Church', balance: '$1,616.60' },
{ firstName: 'Bennett', lastName: 'Ferrell', balance: '$1,165.54' },
{ firstName: 'Bessie', lastName: 'Henry', balance: '$3,202.83' },
{ firstName: 'Richards', lastName: 'Hammond', balance: '$3,441.19' },
{ firstName: 'Richards', lastName: 'Shepard', balance: '$2,657.70' }
] */
multiColumnSort(array, sortArrayOrObject, getColumnValue)
Parameters
array
array Array of objects to be sorted.sortArrayOrObject
array or object Array of tuples or object defining columns to be sorted by, order and direction e.g.[['name', 'ASC'], ['city', 'DESC']]
or{ name: 'ASC', city: 'DESC' }
.getColumnValue
function Optional, by default all values are cast to string. Takescolumn
andvalue
arguments, must return value for comparison.