From 534459dd13f3b92e12f6d5dbacc065d8ada36fd1 Mon Sep 17 00:00:00 2001 From: icarus Date: Thu, 23 Oct 2025 15:32:33 +0800 Subject: [PATCH] refactor(sort): replace lexicalSort with naturalSort for better string comparison Use localeCompare with numeric sensitivity for more natural string sorting behavior --- scripts/sort.ts | 22 +++++++++++++++++----- 1 file changed, 17 insertions(+), 5 deletions(-) diff --git a/scripts/sort.ts b/scripts/sort.ts index adc1fd52b0..176555cf94 100644 --- a/scripts/sort.ts +++ b/scripts/sort.ts @@ -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) }