如何检测并移除JavaScript数组中的重复连续三元组?
移除数组中重复的连续三元组
要检测并移除数组中重复出现的连续三元组,只保留每组三元组的首次出现,可以通过遍历数组并记录已出现的三元组来实现,具体方案如下:
实现思路
- 维护一个结果数组,用于存放去重后的最终元素
- 使用集合存储已出现过的三元组标识,实现快速重复检测
- 按步进3的方式遍历原数组:
- 若当前位置能取到完整三元组,检查是否已记录过
- 重复则跳过这三个元素,不重复则将其加入结果数组并记录
- 数组末尾不足三个元素时,直接将剩余元素追加到结果中
代码实现
let array = [ "string-1", "string-2", "string-3", "string-4", "string-5", "string-3", "string-4", "string-5", "string-6", "string-7", "string-8", "string-9", "string-10", "string-11", "string-9", "string-10", "string-11", "string-12" ]; const result = []; const seenTriples = new Set(); let i = 0; while (i < array.length) { // 检查是否有足够元素组成三元组 if (i + 2 < array.length) { // 生成三元组的唯一标识,用JSON.stringify避免特殊字符冲突 const tripleKey = JSON.stringify([array[i], array[i+1], array[i+2]]); if (seenTriples.has(tripleKey)) { // 跳过重复的三元组 i += 3; continue; } seenTriples.add(tripleKey); result.push(array[i], array[i+1], array[i+2]); i += 3; } else { // 处理剩余的1-2个元素 result.push(...array.slice(i)); break; } } console.log(result); // 输出:["string-1", "string-2", "string-3", "string-4", "string-5", "string-6", "string-7", "string-8", "string-9", "string-10", "string-11", "string-12"]
注意事项
- 若三元组元素包含逗号等特殊字符,用
JSON.stringify生成标识比字符串拼接更可靠,能避免误判重复 - 该方案时间复杂度为O(n),遍历一次数组即可完成去重,效率较高
内容的提问来源于stack exchange,提问作者Aaron
相关产品推荐
相关产品推荐

