Skip to content

Instantly share code, notes, and snippets.

@joshuakemmerling
Last active May 25, 2018 12:51
Show Gist options
  • Save joshuakemmerling/fea9188c11c97f1f23806ad34db08d05 to your computer and use it in GitHub Desktop.
Save joshuakemmerling/fea9188c11c97f1f23806ad34db08d05 to your computer and use it in GitHub Desktop.
Multi Level Sorting with JavaScript
const multilevelsort = (records, order) => records.sort(chainSortBy(order))
const sort_by = ({ key, direction }) => {
return function (a, b) {
a = a[key]
b = b[key]
return a == b ? 0 : [-1, 1][+(direction === 'ascending')] * ((a > b) - (b > a))
}
}
const chainSortBy = order => {
return function (a, b) {
for (let k in order) {
let res = sort_by(order[k])(a, b)
if (res != 0)
return res
}
return 0
}
}
var records = [
{name:"christian", age:40, job:"developer"},
{name:"andrew", age:48, job:"developer"},
{name:"elisabeth", age:31, job:"floor manager"},
{name:"oscar", age:61, job:"floor manager"},
{name:"gisela", age:51, job:"area manager"},
{name:"buffy", age:27, job:"trainee"},
{name:"carl", age:23, job:"trainee"}
];
var order = [
{key: "job", direction: "ascending"},
{key: "age", direction: "descending"}
];
var result = [
{name:"gisela",age:51,job:"area manager"},
{name:"andrew",age:48,job:"developer"},
{name:"christian",age:40,job:"developer"},
{name:"oscar",age:61,job:"floor manager"},
{name:"elisabeth",age:31,job:"floor manager"},
{name:"buffy",age:27,job:"trainee"},
{name:"carl",age:23,job:"trainee"}
];
multilevelsort(records,order) === result
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment