如何通过子串分割筛选数组中后缀重复的元素
按分割后的子串筛选重复元素的解决方案
原代码逻辑是判断数组中完全重复的元素,但你的需求是找出按-分割后,后半段子串重复的所有元素,因此原逻辑无法实现目标。
解决思路
- 先遍历数组,提取每个元素
-之后的子串,统计每个子串的出现次数 - 再次遍历数组,将子串出现次数大于1的元素收集到结果数组中
实现代码
var arr = ['abc-10.10.10.0/22','abc-10.01.21.0/22','abc-10.01.01.0/22','abcd-10.01.01.0/22']; var duplicates = []; // 统计每个后缀子串的出现次数 const suffixCount = {}; arr.forEach(item => { const suffix = item.split('-')[1]; suffixCount[suffix] = (suffixCount[suffix] || 0) + 1; }); // 收集所有后缀重复的元素 arr.forEach(item => { const suffix = item.split('-')[1]; if (suffixCount[suffix] > 1) { duplicates.push(item); } }); console.log("Duplicate values:", duplicates); // 输出:["abc-10.01.01.0/22", "abcd-10.01.01.0/22"]
代码说明
suffixCount对象用于记录每个后缀子串的出现次数,比如示例中10.01.01.0/22会被统计为2次- 第二次遍历数组时,只要元素对应的后缀子串计数大于1,就说明存在其他元素和它的后缀重复,将其加入
duplicates数组即可得到目标结果
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

