/** * 數字、英文、中文,排序 * @param {array} data List * @returns */ export function sortNumEngZhtw(data) { return data.sort((a, b) => { // 檢查兩個值是否都是數字 const isANumber = !isNaN(parseFloat(a)) && isFinite(a); const isBNumber = !isNaN(parseFloat(b)) && isFinite(b); // 如果兩個值都是數字,直接比較大小 if (isANumber && isBNumber) return parseFloat(a) - parseFloat(b); // 如果其中一個值是數字,將數字視為最小,排在前面 if (isANumber) return -1; if (isBNumber) return 1; // 其他情況下,使用 localeCompare 方法進行中文排序 return a.localeCompare(b, 'zh-Hant-TW', { sensitivity: 'accent' }); }); } /** * 數字、英文、中文,給 Filter Table 排序 * @param {string} a label * @param {string} b label * @returns */ export function sortNumEngZhtwForFilter(a, b) { // 檢查兩個值是否都是數字 const isANumber = !isNaN(parseFloat(a)) && isFinite(a); const isBNumber = !isNaN(parseFloat(b)) && isFinite(b); // 如果兩個值都是數字,直接比較大小 if (isANumber && isBNumber) return parseFloat(a) - parseFloat(b); // 如果其中一個值是數字,將數字視為最小,排在前面 if (isANumber) return -1; if (isBNumber) return 1; // 其他情況下,使用 localeCompare 方法進行中文排序 return a.localeCompare(b, 'zh-Hant-TW', { sensitivity: 'accent' }); }