繁体   English   中英

Javascript 排序混合字母数字数组 - 字母升序,数字降序

[英]Javascript sort mixed alphanumeric array - letters ascending, numbers descending

我有一个字母数字数组,我需要按字母升序排序,然后按数字降序排序,该数组如下所示:

[A1, A4, A2, A3, C2, C4, C3, B3, B5, B4]

我如何使用 JavaScript 对数组进行排序,所以它看起来像:

[A4, A3, A2, A1, B5, B4, B3, C4, C3, C2]

我努力了:

arr.sort() 

但这只会按字母顺序和数字升序对它进行排序,给我:

[A1, A2, A3, A4, B3, B4, B5, C2, C3, C4]

如果您始终只有一个字母,则可以按数字 rest 和第一个字母排序。

 const array = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4']; array.sort((a, b) => a[0].localeCompare(b[0]) || b.slice(1) - a.slice(1)); console.log(...array);

如果你有多个字母,你可以采用正则表达式,只得到数字和非数字,分隔成 object。

 const getValues = string => ({ letters: string.match(/\D+/)[0], digits: string.match(/\d+/)[0] }), array = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4']; array.sort((a, b) => { const [aa, bb] = [a, b].map(getValues); return aa.letters.localeCompare(bb.letters) || bb.digits - aa.digits; }); console.log(...array);

array.sort 进行回调,您可以在其中定义如何比较数组中两个元素的条件

执行你的需要一个想法可以是返回第二个字符的比较,如果第一个是相同的

 var data = ['A1', 'A4', 'A2', 'A3', 'C2', 'C4', 'C3', 'B3', 'B5', 'B4']; var result = data.sort((a, b) => { if (a === b) { return 0; } if (a[0] === b[0]) { return (a[1] > b[1])? -1: 1; } return (a > b)? 1: -1; }); console.log(result);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM