首页 > 解决方案 > 对包含带空格的文本的数组进行排序

问题描述

我正在尝试对包含字符串的数组进行排序。每个值通常具有以下结构:[注册号][][账号][,][账号名]

但在极少数情况下,一个值没有前 4 个 reg.numbers + 一个空格。

这是一个数组的例子:

var accounts = ["1111 12345678, Account1", 
              "2222 12345678, Account2", 
              "11345678, Account3", 
              "12345678, Account4", 
              "3333 12345678, Account5"];

我可以使用accounts.sort() 对帐户进行排序,这几乎可以正常工作。但我想对值进行排序,并且没有 reg.no 的值出现在排序数组的最后(仍然按字母顺序排序)。

所以对accounts数组进行排序应该得到这个列表:

1111 12345678, Account1
2222 12345678, Account2
3333 12345678, Account5
11345678, Account3
12345678, Account4

对此有什么好的建议吗?

标签: javascriptarrayssorting

解决方案


您可以检查前导数字并将这些数字排序到顶部。

const hasLeading = s => /^\S+\s\S+\s\S+$/.test(s);

var accounts = ["1111 12345678, Account1", "2222 12345678, Account2", "11345678, Account3", "12345678, Account4", "3333 12345678, Account5"];

accounts.sort((a, b) => hasLeading(b) - hasLeading(a) || a > b || -(a < b));

console.log(accounts);


推荐阅读