[英]javascript array sort strings and numbers
我想用字符串和數字對數組進行排序。
var toSort = ['100', 'Calc', '30', '43', '52', '16', '10', '11', '12', 'Calc', '2', 'N/A', '8'];
預期的行為是當對字符串進行排序時,將在兩種狀態(asc 和 desc)的列表末尾進行排序,例如: asc:
['2','8','10','11','12','16','30','43','52','100','Calc','Calc','N/A']
描述:
['100','52','43','30','16','12','11','10','8','2','Calc','Calc','N/A']
我有它用於 asc state:
toSort.sort(function (a,b) {
if (a === 'Calc') return 1;
else if (a === 'N/A') return 1;
else return a.localeCompare(b, undefined, { numeric: true});
});
console.log(toSort);
desc state 有什么想法嗎? tnx
您可以檢查值是否為isFinite
。
const array = ['100', 'Calc', '30', '43', '52', 'Calc', '16', '10', 'N/A', '123', '11', '12', 'Calc', '2', 'N/A', '8']; array.sort((a, b) => isFinite(b) - isFinite(a) || a - b || a.localeCompare(b)); console.log(...array); array.sort((a, b) => isFinite(b) - isFinite(a) || b - a || a.localeCompare(b)); console.log(...array);
您可以創建一個具有 2 個屬性numbers
的 object ,帶有reduce的strings
,之后您可以傳遞 object ,您可以在其中進行相應的排序並返回結果。
finalResult = result after sorting numbers + result after sorting strings.
var toSort = [ "100", "Calc", "30", "43", "52", "16", "10", "11", "12", "Calc", "2", "N/A", "8", ]; function sort({ strings, numbers }, type) { if (type === "asc") { return [...numbers.sort((a, b) => a - b), ...strings.sort((a, b) => (a > b? 1: -1)), ]; } else { return [...numbers.sort((a, b) => b - a), ...strings.sort((a, b) => (a > b? -1: 1)), ]; } } const obj = toSort.reduce( (acc, curr) => { if (/\d+/g.test(curr)) acc.numbers.push(curr); else acc.strings.push(curr); return acc; }, { strings: [], numbers: [] } ); console.log(sort(obj, "asc")); console.log(sort(obj, "dsc"));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.