I am looking to organize a multidimensional array by multiple column index.
Take, for instance, the test data provided below:
var source = [
["Jack","A","B1", 4],
["AVicky","M", "B2", 2],
["AVicky","F", "B3", 3],
];
I need to be able to dynamically sort the 'source' array based on different combinations of column indexes. For example, sorting first by first and second columns, and then next time by all three columns.
The current code I have tried only allows me to sort based on a specific column index as shown below:
var source = [
["Jack","A","B1", 4],
["AVicky","M", "B2", 2],
["AVicky","F", "B3", 3],
];
var target = [
["Tom","M", "B3", 2],
["Jack","F", "B1", 1],
["Cindy","F", "B3", 3],
];
var keyIndexs = [0,1];
var same = [];
//order rows
var sourceOrder = source
keyIndexs.forEach(i => sourceOrder = sortByColumn(sourceOrder, i)) ;
console.log(sourceOrder);
for(var i = 0; i < source.length; i ++){
//console.log(ContainsRow(source[i], target));
if(ContainsRow(source[i], target)){
same.push(source[i]);
}
}
console.log(same);
function CompareRow(source:any[], target:any[]):boolean{
return JSON.stringify(source) === JSON.stringify(target);
}
function ContainsRow(source:any[], target: any[][]):boolean{
for(var i = 0; i <target.length; i ++){
if(CompareRow(source, target[i])){
return true;
}
}
return false;
}
function sortByColumn(a, colIndex){
a.sort(sortFunction);
function sortFunction(a, b) {
if (a[colIndex] === b[colIndex]) {
return 0;
}
else {
return (a[colIndex] < b[colIndex]) ? -1 : 1;
}
}
return a;
}