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

JavaScript中如何提取字符串数组的公共前缀并移除该前缀

如何在JavaScript中找出字符串数组的公共前缀并移除它?

我来帮你搞定这个需求!咱们可以拆成两个核心步骤来实现:先找出所有字符串的最长公共前缀,再遍历数组把每个字符串的这个前缀去掉。下面是具体的实现方案:

1. 实现思路

第一步:寻找最长公共前缀

  • 以数组的第一个字符串作为基准模板,逐个字符和数组里其他字符串的对应位置对比
  • 一旦发现某个位置的字符不匹配,或者某个字符串已经遍历完,那么之前的所有字符就是公共前缀
  • 如果数组为空,或者第一个字符串为空,直接返回空字符串作为公共前缀

第二步:移除公共前缀

  • 拿到公共前缀的长度后,遍历数组里的每个字符串,用slice()方法切掉前缀部分即可
  • 就算某个字符串长度比前缀短(极端情况),slice()也会返回空字符串,不会报错

2. 完整代码实现

function removeCommonPrefix(strings) {
    // 处理空数组的情况
    if (strings.length === 0) return [];
    
    // 第一步:找出最长公共前缀
    function findCommonPrefix(arr) {
        let prefix = arr[0];
        for (let i = 1; i < arr.length; i++) {
            // 不断缩短前缀,直到当前字符串以它开头
            while (!arr[i].startsWith(prefix)) {
                prefix = prefix.slice(0, prefix.length - 1);
                // 如果前缀被缩短为空,直接返回
                if (prefix === '') return '';
            }
        }
        return prefix;
    }
    
    const commonPrefix = findCommonPrefix(strings);
    // 第二步:移除每个字符串的公共前缀
    return strings.map(str => str.slice(commonPrefix.length));
}

// 测试示例
const input = ["05098701", "05012302", "0545621", "0509301"];
const output = removeCommonPrefix(input);
console.log(output); // 输出: ["098701", "012302", "45621", "09301"]

3. 代码解释

  • findCommonPrefix函数:通过逐步缩短前缀的方式,确保找到的是所有字符串都共有的最长前缀
  • removeCommonPrefix主函数:先调用上面的函数拿到前缀,再用map()遍历数组,每个字符串调用slice(commonPrefix.length)来移除前缀
  • 测试示例完全符合你给出的需求,运行后就能得到预期的结果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 11:01:04