cherry-studio/scripts/sort.ts

33 lines
983 B
TypeScript

/**
* Natural sort function for strings, meant to be used as the sort
* function for `Array.prototype.sort`.
*
* @param a - First element to compare.
* @param b - Second element to compare.
* @returns A number indicating which element should come first.
*/
function naturalSort(a: string, b: string): number {
return a.localeCompare(b, undefined, { numeric: true, sensitivity: 'base' })
}
/**
* Sort object keys in dictionary order (supports nested objects)
* @param obj The object to be sorted
* @returns A new object with sorted keys
*/
export function sortedObjectByKeys(obj: object): object {
const sortedKeys = Object.keys(obj).sort(naturalSort)
const sortedObj = {}
for (const key of sortedKeys) {
let value = obj[key]
// If the value is an object, sort it recursively
if (typeof value === 'object' && value !== null && !Array.isArray(value)) {
value = sortedObjectByKeys(value)
}
sortedObj[key] = value
}
return sortedObj
}