JavaScript数组按规则归约:匹配前缀去重并添加星号标记
数组归约实现方案
核心逻辑
- 用集合记录已添加的带星号前缀,避免重复插入
- 遍历原数组时,对每个元素做两种判断:
- 提取元素前两个字符,若该前缀在
generalCase数组中:仅当该前缀未被记录过,才将前缀*加入结果数组,同时标记该前缀已处理 - 若前缀不在
generalCase数组中:直接保留原元素到结果数组
- 提取元素前两个字符,若该前缀在
代码示例
假设输入数组为:
const arr = ["ADB", "AB123", "AB456", "BD789", "BP012", "STR"]; const generalCase = ["AB", "BD", "BP"];
实现代码:
const reducedArray = []; const processedPrefixes = new Set(); arr.forEach(item => { const prefix = item.slice(0, 2); if (generalCase.includes(prefix)) { if (!processedPrefixes.has(prefix)) { reducedArray.push(`${prefix}*`); processedPrefixes.add(prefix); } } else { reducedArray.push(item); } }); console.log(reducedArray); // 输出:["ADB", "AB*", "BD*", "BP*", "STR"]
问题排查
之前的代码出现多余项,通常是因为没有做前缀去重——每次遇到匹配前缀的元素就插入一次前缀*,导致结果里出现重复的带星号前缀。用集合记录已处理的前缀,就能保证每个符合条件的前缀只被添加一次。
内容的提问来源于stack exchange,提问作者Sachihiro
相关产品推荐
相关产品推荐

