How to sort a array of object based on two properties and check the rage is sequential?

Viewed 48

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. 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}
]

using lodash but output not correct in both scenario

 const SlabDetails = orderBy(this.tableData, [r => r.conditionalTo - r.conditionalFrom, r => r.computationTo - r.computationFrom], "asc");
1 Answers

You could specify the wnated properties by using _.sortBy.

const
    sort = data => _.sortBy(data, [
        'conditionalFrom',
        'computationFrom',
        'computationTo'
    ]),
    data0 = [{ conditionalFrom: 0, conditionalTo: 10000, computationFrom: 0, computationTo: 1000 }, { conditionalFrom: 10001, conditionalTo: 10000000, computationFrom: 1001, computationTo: 100000 }, { conditionalFrom: 10001, conditionalTo: 999999999999, computationFrom: 0, computationTo: 1000 }],
    data1 = [{ 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 }];

console.log(sort(data0));
console.log(sort(data1));
.as-console-wrapper { max-height: 100% !important; top: 0; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.min.js"></script>

Related