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

JavaScript如何实现数组除首元素外其余内容仅保留差异部分

相似字符串数组压缩处理函数

实现逻辑

利用前缀后缀匹配提取差异段,实现需求:

  1. 数组第一个元素保留完整内容不变
  2. 其余元素仅保留和首元素不同的内容,其余相同部分替换为//

完整实现代码

function processSimilarArray(arr) {
  // 边界处理:数组长度小于等于1直接返回
  if (!Array.isArray(arr) || arr.length <= 1) return arr;
  const base = arr[0];
  const result = [base];
  // 遍历处理除第一个外的所有元素
  for (let i = 1; i < arr.length; i++) {
    const current = arr[i];
    // 计算最长公共前缀长度
    let prefixLen = 0;
    while (prefixLen < base.length && prefixLen < current.length && base[prefixLen] === current[prefixLen]) {
      prefixLen++;
    }
    // 计算最长公共后缀长度
    let suffixLen = 0;
    while (
      suffixLen < base.length - prefixLen &&
      suffixLen < current.length - prefixLen &&
      base[base.length - 1 - suffixLen] === current[current.length - 1 - suffixLen]
    ) {
      suffixLen++;
    }
    // 提取差异部分
    const diff = current.slice(prefixLen, current.length - suffixLen);
    result.push(`// ${diff} //`);
  }
  return result;
}

使用示例

// 测试用例1
let r = [
  'Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 20% for 12s.',
  'Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 25% for 12s.',
  'Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 30% for 12s.',
  'Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 35% for 12s.',
  'Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 40% for 12s.'
]
console.log(processSimilarArray(r))
/* 输出:
[
  "Upon causing an Overloaded, Melt, Burning, Vaporize, or a Pyro-infused Swirl reaction, increases Base ATK by 20% for 12s.",
  "// 25% //",
  "// 30% //",
  "// 35% //",
  "// 40% //"
]
*/

// 测试用例2
let r1 = [
  'Increases Movement SPD by 10%. When in battle, gain an 8% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.',
  'Increases Movement SPD by 10%. When in battle, earn an 8% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.',
  'Increases Movement SPD by 10%. When in battle, earn a 10% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.',
  'Increases Movement SPD by 10%. When in battle, earn a 12% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.',
  'Increases Movement SPD by 10%. When in battle, earn a 14% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.'
]
console.log(processSimilarArray(r1))
/* 输出:
[
  "Increases Movement SPD by 10%. When in battle, gain an 8% Elemental DMG Bonus every 4s. Max 4 stacks. Lasts until the character falls or leaves combat.",
  "// earn an 8% //",
  "// earn a 10% //",
  "// earn a 12% //",
  "// earn a 14% //"
]
*/

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 11:45:04