JavaScript如何根据字符串内的数字对数组进行升序排序
JS数组按字符串内数字升序排序实现方案
核心实现逻辑
要兼容1位、2位、3位数字的识别,注意不要直接用字符串默认排序规则处理数字,否则会出现'10'排在'2'前面的错误(字符串比较是逐字符对比,不会按数值大小判断),正确处理逻辑如下:
- 用正则
/\d+/匹配字符串中连续的数字段,不受数字位数限制 - 将提取到的数字段转为整数,通过数值差判断排序顺序
- 同数字场景下可追加前缀字母的比较,保证排序稳定性
完整可运行代码
// 初始数组 const sourceArr = [ 'B3', 'B4', 'B5', 'B6', 'C3', 'C4', 'C5', 'C6', 'D3', 'D4', 'D5', 'D6' ] // 排序处理 const sortedArr = sourceArr.sort((prev, next) => { // 提取两个元素中的数字并转成整数 const prevNum = parseInt(prev.match(/\d+/)[0], 10) const nextNum = parseInt(next.match(/\d+/)[0], 10) // 数字相等时按前缀字母排序,否则直接按数字升序排 return prevNum === nextNum ? prev.localeCompare(next) : prevNum - nextNum })
运行结果
执行后sortedArr的输出和预期完全一致:
[ 'B3', 'C3', 'D3', 'B4', 'C4', 'D4', 'B5', 'C5', 'D5', 'B6', 'C6', 'D6' ]
说明:该写法对数字位数没有强制限制,除了1-3位数字外,更多位数的数字(比如
A10、B123、C9999这类格式)也能正确排序。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

