首页 > 解决方案 > 如何先用字母然后用数字对数组项进行排序?

问题描述

我有这个数组

const a = ['s2', 'sb', 's5', 's1', 'sc', 's3', 's4']

排序后我想要这个结果:

['sb', 'sc', 's1', 's2', 's3', 's4', 's5']

我尝试使用 sort() 但没有用

标签: javascript

解决方案


您最初可以使用 localeCompare 进行排序,然后通过测试 number 是否存在:

const a = ['s2', 'sb', 's5', 's1', 'sc', 's3', 's4', 's10', 'sa', 'sza', 's200', 's12', 's113'];
a.sort((a, b) => a.localeCompare(b, 'en', { numeric: true }))
 .sort((x, y) => (/[0-9]/g).test(x) - (/[0-9]/g).test(y));

console.log(a);
// ["sa", "sb", "sc", "sza", "s1", "s2", "s3", "s4", "s5", "s10", "s12", "s113", "s200"]

推荐阅读