I have an array which should be sorted based on conditionalTo and set a index based on the sequence, whenever the sequence is changed index should be incremented. once this is done we need to sort the array again based on computationTo within the index only second level sorting should happen
const array =
[
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
]
sorted based on conditionalTo and added number for each sequence
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400, sequece: 1},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300, sequece: 1},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200, sequece: 2},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000, sequece: 2},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000, sequece: 3},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150, sequece: 3},
]
sort based on computationTo and sequence
const sorted =
[
{conditionalFrom: 0, conditionalTo: 100, computationFrom: 0, computationTo: 400},
{conditionalFrom: 0, conditionalTo: 110, computationFrom: 20, computationTo: 200},
{conditionalFrom: 10, conditionalTo: 100, computationFrom: 0, computationTo: 300},
{conditionalFrom: 12, conditionalTo: 112, computationFrom: 100, computationTo: 1000},
{conditionalFrom: 100, conditionalTo: 110, computationFrom: 1001, computationTo: 100000},
{conditionalFrom: 102, conditionalTo: 112, computationFrom: 10, computationTo: 150},
]
tried soo many methods including noramal sort lodash sortby orderby but nothing really worked pls help Added sequence is actually a work around when nothing really worked
const SlabDetails = orderBy(this.tableData, [r => r.conditionalTo - r.conditionalFrom, r => r.computationTo - r.computationFrom], "asc");
You are thinking of it in the wrong order. You can sort
the array based on conditionalTo
and computationTo
first. Then, add a sequence
property to each object. Increment it if the conditionalTo
is different compared to the previous object
const array =[{conditionalFrom:102,conditionalTo:112,computationFrom:10,computationTo:150},{conditionalFrom:0,conditionalTo:100,computationFrom:0,computationTo:400},{conditionalFrom:10,conditionalTo:100,computationFrom:0,computationTo:300},{conditionalFrom:0,conditionalTo:110,computationFrom:20,computationTo:200},{conditionalFrom:12,conditionalTo:112,computationFrom:100,computationTo:1000},{conditionalFrom:100,conditionalTo:110,computationFrom:1001,computationTo:100000},];
array.sort((a,b) => a.conditionalTo - b.conditionalTo || a.computationTo - b.computationTo)
let previous,
sequence = 0;
for (const o of array) {
if (o.conditionalTo !== previous) {
++sequence;
previous = o.conditionalTo
}
o.sequence = sequence
}
console.log(array)