44 lines
1.4 KiB
JavaScript
44 lines
1.4 KiB
JavaScript
/**
|
|
* 數字、英文、中文,排序
|
|
* @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' });
|
|
}
|