JavaScript面试题:按字符串中的数字升序排列数组
JavaScript数组按内嵌数字升序排序的解法
要解决这个问题,核心是提取每个字符串中的数字部分,基于数值大小进行排序,完全忽略字母部分。以下是具体实现步骤:
- 提取数字部分:使用正则表达式
/\d+/匹配字符串中的连续数字,将匹配结果转为数值类型(前导零会被自动处理,不影响排序逻辑)。 - 自定义排序规则:利用数组的
sort()方法,传入比较函数,通过提取的数值差实现升序排列。
完整代码实现
const arr = ['sd101', 'zt099', 'tr134', 'gh234', 'cv056']; function sortByEmbeddedNumber(arr) { return arr.sort((a, b) => { // 提取并转换数字部分 const numA = Number(a.match(/\d+/)[0]); const numB = Number(b.match(/\d+/)[0]); // 升序排序:返回负数则a排在b前,正数则b排在a前 return numA - numB; }); } // 验证结果 console.log(sortByEmbeddedNumber(arr)); // 输出:['cv056', 'zt099', 'sd101', 'tr134', 'gh234']
额外说明
如果需要兼容字符串中无数字的情况,可以给提取逻辑加个兜底判断,避免报错:
const numA = a.match(/\d+/) ? Number(a.match(/\d+/)[0]) : 0; const numB = b.match(/\d+/) ? Number(b.match(/\d+/)[0]) : 0;
这样没有数字的元素会被视为0,排在最前面。
内容的提问来源于stack exchange,提问作者starun26
相关产品推荐
相关产品推荐

