如何忽略空格差异从句子数组中去除重复句子
忽略空格的字符串数组去重实现
需求背景
我们有如下示例数组:
const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']
需要返回去重结果:
['bic ycle drive', 'bici ycl frei', 'manace']
去重规则:仅空格位置不同的字符串视为重复内容,重复项可任选其一保留。
实现方案
核心思路是将字符串移除所有空格后作为唯一判断标识,记录已出现的标识过滤重复项,代码如下:
function deduplicateIgnoreSpace(arr) { const seenKeys = new Set(); return arr.filter(item => { // 移除所有空格生成判断用的唯一key const key = item.replace(/\s/g, ''); if (!seenKeys.has(key)) { seenKeys.add(key); return true; } return false; }); } // 测试调用 const array = ['bic ycle drive', 'bici ycl frei', 'bicyc le dri ve', 'manace', 'bicycle drive', 'bicycle drive']; const res = deduplicateIgnoreSpace(array); console.log(res); // 输出符合预期的结果
说明
- 正则
\s匹配所有空格字符,加g修饰符匹配全部空格,替换为空后即可消除空格位置差异带来的判断干扰 - 采用Set存储已出现的标识,判断效率更高,整体遍历一次数组即可完成去重,时间复杂度为O(n)
- 代码默认保留首次出现的重复项,若需要保留最后一次出现的重复项,倒序遍历数组后反转结果即可
内容的提问来源于stack exchange,提问作者greatertomi
相关产品推荐
相关产品推荐

