[英]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.