Skip to main content
1-Visitor
July 15, 2019
Solved

Sorting an infotable based on order specified

  • July 15, 2019
  • 1 reply
  • 3261 views

Hi,

 

I am trying to sort an infotable result set based on specific order (array)

 

Example:

My Infotable result set:

Column1 Column2 Column3
d desc1 desc one
h desc2 desc two
f desc3 desc three
t desc4 desc four

 

My order to sort  ::  [f,t,h,d]

 

Expected result set after sorting

Column1 Column2 Column3
f desc3 desc three
t desc4 desc four
h desc2 desc two
d desc1 desc one

 

Would highly appreciate a quick turnaround.

 

Thanks in advance.

Best answer by CarlesColl

Not super efficient, but should work:

 

function sort(array,sortOrder,sortColumn) {
 function sortFunc(a, b) {
 return sortOrder.indexOf(a[sortColumn]) - sortOrder.indexOf(b[sortColumn]);
 }
 var temp = [];
 for each(row in array.rows) temp.push(row);
 var nItems = array.rows.length;
 for (var i=0;i<nItems;i++) delete array.rows[0];
 temp.sort(sortFunc);
 for (var i=0;i<temp.length;i++) array.AddRow(temp[i]);
}
sort(result,['f','t','h','d'],'column1');

1 reply

1-Visitor
July 15, 2019

Not super efficient, but should work:

 

function sort(array,sortOrder,sortColumn) {
 function sortFunc(a, b) {
 return sortOrder.indexOf(a[sortColumn]) - sortOrder.indexOf(b[sortColumn]);
 }
 var temp = [];
 for each(row in array.rows) temp.push(row);
 var nItems = array.rows.length;
 for (var i=0;i<nItems;i++) delete array.rows[0];
 temp.sort(sortFunc);
 for (var i=0;i<temp.length;i++) array.AddRow(temp[i]);
}
sort(result,['f','t','h','d'],'column1');
1-Visitor
July 15, 2019

Thanks Carles it worked 🙂