'Javascript Array Sort and Groupby input order with various columns [duplicate]

Here are the input data.

const input = [
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location1", Data: "2", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location2", Data: "1", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location2", Data: "1", CompareFlag: "false"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location3", Data: "2.0", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location4", Data: "100.0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location5", Data: "0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location2", Data: "0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location5", Data: "0", CompareFlag: "false"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location3", Data: "6.0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location2", Data: "0", CompareFlag: "false"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "false"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"}
];

I want get data as following.

const output = [
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location1", Data: "2", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location2", Data: "1", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location2", Data: "1", CompareFlag: "false"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location2", Data: "0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location2", Data: "0", CompareFlag: "false"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location3", Data: "2.0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area1", DataLabel: "Location4", Data: "100.0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area1", DataLabel: "Location5", Data: "0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area1", DataLabel: "Location5", Data: "0", CompareFlag: "false"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "false"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location5", Data: "5", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location2", Data: "7", CompareFlag: "true"},
 {Time: "09:00", SpotName: "Area2", DataLabel: "Location3", Data: "6.0", CompareFlag: "true"},
 {Time: "10:00", SpotName: "Area2", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"},
 {Time: "11:00", SpotName: "Area2", DataLabel: "Location3", Data: "0.0", CompareFlag: "true"}
];

I want to sort and groupby "SpotName" and "DataLabel", "CompareFlag". Sort is input order not alphabetic. I'm trying to implement it as a recursive function, but it doesn't work. Who can help me? This is javascript.



Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source