[英]Sort array of strings with negative and positive numbers
首先,我無法找到解決整個問題的問題。
我曾經比較這樣的數組:
array.sort((a, b) => {
return a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'})
})
但我意識到它不適用於像['a', 'A', 'B', -1.50', '0', '1.50', '-2', '2']
這樣的數組。
預期輸出將是: ['-2', '-1.50', '0', '1.50', '2', 'A', 'a', 'B']
。
我有一些骯臟的想法來實現它。 但也許有一個干凈簡單的方法。
您可以通過獲取所需屬性的增量來預先進行比較。 這樣可以保存數值的順序。
console.log( ['a', 'A', 'B', '-1.50', '0', '1.50', '-2', '2', 'D'] .sort((a, b) => a - b || a.localeCompare(b, undefined, {sensitivity: 'base'})) );
numeric: true
選項可以省略,因為在表達式的左側不會有兩個數字要比較。
您應該使用isNaN
方法來檢查是否比較數字字符串。 如果是,建議不要使用localeCompare
,需要使用Number(a) - Number(b)
array = ['a', 'A', 'B','-1.50', '0', '1.50', '-2', '2'] array.sort((a, b) => { return !isNaN(a) && !isNaN(b) ? Number(a)-Number(b) : a.localeCompare(b, undefined, { sensitivity: 'base'}); }) console.log(array);
因為在Javascript中-
運算符僅定義為數字減法,所以操作數將被強制轉換為Number
。 所以你可以簡單地使用:
array.sort((a, b) => {
return a - b || a.localeCompare(b, undefined, { sensitivity: 'base'});
})
const customSort = (array) => {
return array.sort((a, b) => {
let r = /^-?\d+(?:\.\d+)?$/;
if (r.test(a) && r.test(b))
{
return a - b;
}
return a.localeCompare(b, undefined, {numeric: true, sensitivity: 'base'})
})
}
console.log(customSort(['a', 'A', 'B', '-1.50', '0', '1.50', '-2', '2']));
// => [ '-2', '-1.50', '0', '1.50', '2', 'a', 'A', 'B' ]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.