1*082815dcSEvan Baconexport function sortObject<T extends Record<string, any> = Record<string, any>>( 2*082815dcSEvan Bacon obj: T, 3*082815dcSEvan Bacon compareFn?: (a: string, b: string) => number 4*082815dcSEvan Bacon): T { 5*082815dcSEvan Bacon return Object.keys(obj) 6*082815dcSEvan Bacon .sort(compareFn) 7*082815dcSEvan Bacon .reduce( 8*082815dcSEvan Bacon (acc, key) => ({ 9*082815dcSEvan Bacon ...acc, 10*082815dcSEvan Bacon [key]: obj[key], 11*082815dcSEvan Bacon }), 12*082815dcSEvan Bacon {} 13*082815dcSEvan Bacon ) as T; 14*082815dcSEvan Bacon} 15*082815dcSEvan Bacon 16*082815dcSEvan Baconexport function sortObjWithOrder<T extends Record<string, any> = Record<string, any>>( 17*082815dcSEvan Bacon obj: T, 18*082815dcSEvan Bacon order: string[] 19*082815dcSEvan Bacon): T { 20*082815dcSEvan Bacon const sorted = sortWithOrder(Object.keys(obj), order); 21*082815dcSEvan Bacon 22*082815dcSEvan Bacon return sorted.reduce( 23*082815dcSEvan Bacon (acc, key) => ({ 24*082815dcSEvan Bacon ...acc, 25*082815dcSEvan Bacon [key]: obj[key], 26*082815dcSEvan Bacon }), 27*082815dcSEvan Bacon {} 28*082815dcSEvan Bacon ) as T; 29*082815dcSEvan Bacon} 30*082815dcSEvan Bacon 31*082815dcSEvan Baconexport function sortWithOrder(obj: string[], order: string[]): string[] { 32*082815dcSEvan Bacon const groupOrder = [...new Set(order.concat(obj))]; 33*082815dcSEvan Bacon const sorted: string[] = []; 34*082815dcSEvan Bacon 35*082815dcSEvan Bacon while (groupOrder.length) { 36*082815dcSEvan Bacon const key = groupOrder.shift()!; 37*082815dcSEvan Bacon const index = obj.indexOf(key); 38*082815dcSEvan Bacon if (index > -1) { 39*082815dcSEvan Bacon const [item] = obj.splice(index, 1); 40*082815dcSEvan Bacon sorted.push(item); 41*082815dcSEvan Bacon } 42*082815dcSEvan Bacon } 43*082815dcSEvan Bacon 44*082815dcSEvan Bacon return sorted; 45*082815dcSEvan Bacon} 46*082815dcSEvan Bacon 47*082815dcSEvan Baconexport const reverseSortString = (a: string, b: string) => { 48*082815dcSEvan Bacon if (a < b) return 1; 49*082815dcSEvan Bacon if (a > b) return -1; 50*082815dcSEvan Bacon return 0; 51*082815dcSEvan Bacon}; 52