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

JavaScript获取带数字后缀字符串数组的最新版本元素

解决数组提取同类字符串最新版本的方案

嘿,这个问题其实挺常见的,我来给你捋个实用的解决方案😉

核心思路

我们需要把数组里的字符串按**前缀(非数字部分)**分组,每组中保留末尾数字最大的那个字符串——毕竟数字越大代表“版本越新”。关键在于准确拆分前缀和数字,并且用数字而非字符串比较大小(避免出现'9' > '10'的错误)。

具体实现代码

这里用JavaScript来写,逻辑清晰且能适配多种情况:

let array = ['House1', 'House2', 'House3', 'Block1', 'Block2', 'BlockSpecial1'];

// 1. 分组并记录每个前缀对应的最大数字字符串
const groupedData = array.reduce((accumulator, currentStr) => {
    // 用正则拆分前缀和末尾数字:匹配前面所有非数字(尽可能短)+ 末尾连续数字
    const matchResult = currentStr.match(/^(.*?)(\d+)$/);
    
    // 处理特殊情况:如果字符串没有末尾数字,直接保留(可根据你的需求调整)
    if (!matchResult) {
        accumulator[currentStr] = currentStr;
        return accumulator;
    }

    const prefix = matchResult[1];
    const number = parseInt(matchResult[2], 10);

    // 更新当前前缀的最大数字记录
    if (!accumulator[prefix] || number > accumulator[prefix].maxNum) {
        accumulator[prefix] = {
            maxNum: number,
            fullString: currentStr
        };
    }

    return accumulator;
}, {});

// 2. 从分组结果中提取最终需要的字符串数组
const latestVersions = Object.values(groupedData).map(item => item.fullString || item);

console.log(latestVersions); // 输出:['House3', 'Block2', 'BlockSpecial1']

方案优势

  • 适配多位数字:不管数字是1位、2位还是3位,parseInt都会把它转成数字类型比较,比如House10会正确被判定为比House9新。
  • 动态适配数组变化:不管数组后续新增多少同类字符串,只要保持“前缀+数字”的格式,这个逻辑都能自动筛选出最新版本。
  • 兼容特殊情况:如果数组里出现不带末尾数字的字符串,代码会直接保留它(你可以根据实际需求修改这部分逻辑)。

内容的提问来源于stack exchange,提问作者Sandworm

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:29:25