繁体   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