refactor(sort): replace lexicalSort with naturalSort for better string comparison

Use localeCompare with numeric sensitivity for more natural string sorting behavior
This commit is contained in:
icarus 2025-10-23 15:32:33 +08:00
parent b2e2acebb1
commit 534459dd13

View File

@ -18,17 +18,29 @@ function lexicalSort(a: string, b: string): number {
}
/**
*
* @param obj
* @returns
* 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(lexicalSort)
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)
}