簡體   English   中英

javascript 數組排序字符串和數字

[英]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 ,帶有reducestrings ,之后您可以傳遞 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM