JavaScript如何实现数组除首元素外其余内容仅保留差异部分
相似字符串数组压缩处理函数
实现逻辑
利用前缀后缀匹配提取差异段,实现需求:
- 数组第一个元素保留完整内容不变
- 其余元素仅保留和首元素不同的内容,其余相同部分替换为
//
完整实现代码
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
相关产品推荐
相关产品推荐

