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) }