You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.23 12:47:13