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.
相关产品推荐
相关产品推荐

