首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript排序混合字母数字数组-字母升序,数字下降

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

Stack Overflow用户
提问于 2022-03-29 11:38:29
回答 2查看 99关注 0票数 0

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

代码语言:javascript
复制
[A1, A4, A2, A3, C2, C4, C3, B3, B5, B4]

如何使用JavaScript对数组进行排序,看起来如下:

代码语言:javascript
复制
[A4, A3, A2, A1, B5, B4, B3, C4, C3, C2]

我试过:

代码语言:javascript
复制
arr.sort() 

但这只是按字母和数字顺序排列,给我:

代码语言:javascript
复制
[A1, A2, A3, A4, B3, B4, B5, C2, C3, C4]
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-03-29 11:51:38

如果你总是有一个字母,你可以根据数字休息和第一个字母排序。

代码语言:javascript
复制
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);

如果您有多个字母,您可以接受一个正则表达式,只获取数字和非数字,分隔为一个对象。

代码语言:javascript
复制
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);

票数 1
EN

Stack Overflow用户

发布于 2022-03-29 11:47:01

array.sort接受回调,在这里可以定义如何比较数组中的两个元素的条件

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

代码语言:javascript
复制
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);

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71661332

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档