How to sort a array of object based on range of values from each row?

Viewed 153

I have a array of object which with values having ranges where I want to sort the values based on the ranges. First it should sort based on conditionalTo and then within the range on conditional from to conditionalto it should sort computationto. pls help stackblitz jsfiddle array

[
    {conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
    {conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
    {conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000}
]

expected result

[
    {conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
    {conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000},
    {conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
]

array

[
    {conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000},
    {conditionalFrom: 0, conditionalTo: 10000, computationFrom: 1001, computationTo: 100000},
    {conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
    {conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 0, computationTo: 1000},
]

expected result

[
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 0, conditionalTo: 10000, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 0, computationTo: 1000},
{conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000}
]

im using lodash to sort but second level sorting is not working

const result = sortBy((sortBy(array, 'computationTo')), 'conditionalTo');
1 Answers

you can custom sort delegate like :

arr.sort((a, b) => {
    let ret = a.conditionalTo - b.conditionalTo;
    if (ret !== 0)
        return ret;
    return a.conditionalFrom - b.conditionalFrom;
});
Related