javascript - 对包含带空格的文本的数组进行排序
问题描述
我正在尝试对包含字符串的数组进行排序。每个值通常具有以下结构:[注册号][][账号][,][账号名]
但在极少数情况下,一个值没有前 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
对此有什么好的建议吗?
解决方案
您可以检查前导数字并将这些数字排序到顶部。
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);
推荐阅读
- windows-10 - 右键单击所选文本打开 URL
- java - 如何使用自定义 jooq 生成器并将其用作 sbt 任务?
- c++ - 网格相交 3D
- git - 使用子模块为项目创建工作树
- python - 在 Django 保存功能中重置密码
- dart - Dart:如何创建一个不是传入参数的公共最终对象
- python - 使用字典而不是值的 Scrapy 产量
- azure - 发生传输级错误 - 指定的网络名称不再可用。(天蓝色突触)
- python - 将所有请求重定向到 sanic 的更快方法?
- flutter - 如何在 TextFormFields 上使用 Flutter_Riverpod 和 TextEditingControllers 避免 markNeedsBuilder() 错误?