I'm trying to sort the following array of objects:
var input = [
{ name: 'Trevor Hansen', group: 'Group 1' },
{ name: 'Britta Holt', group: 'Group 2' },
{ name: 'Jane Smith ', group: 'Group 2' },
{ name: 'Sandra Adams', group: 'Group 1' },
{ name: 'Ali Connors', group: 'Group 1' },
{ name: 'John Smith', group: 'Group 2' },
{ name: 'Sandra Williams', group: 'Group 2' },
{ name: 'Tucker Smith', group: 'Group 1' },
],
This should be the result:
var result = [
{ header: 'Group 1' },
{ name: 'Sandra Adams', group: 'Group 1' },
{ name: 'Ali Connors', group: 'Group 1' },
{ name: 'Trevor Hansen', group: 'Group 1' },
{ name: 'Tucker Smith', group: 'Group 1' },
{ divider: true },
{ header: 'Group 2' },
{ name: 'Britta Holt', group: 'Group 2' },
{ name: 'Jane Smith ', group: 'Group 2' },
{ name: 'John Smith', group: 'Group 2' },
{ name: 'Sandra Williams', group: 'Group 2' },
],
After sorting the array, a header object needs to be added before each group followed by a divider object between groups but before a new header.
This is my current code, to sort the array:
function compare(a, b) {
const valueA = a.group.toUpperCase();
const valueB = b.group.toUpperCase();
let comparison = 0;
if (valueA > valueB) {
comparison = 1;
} else if (valueA < valueB) {
comparison = -1;
}
return comparison;
}
array.sort(compare);
But how can I add a header and divider at the right point when necessary?
Any help is very much appreciated!
input.groupby(x=>x.group).orderby(x=>x.key).select(x=>x.prepend({header:x.key})).join({ divider: true })