JavaScript如何筛选数组仅返回出现次数为1的元素
实现思路
要得到数组中仅出现一次的元素,核心逻辑是先统计每个元素的出现次数,再筛选出出现次数等于1的元素即可,以下是两种常用实现方案:
方案1:Map统计次数(推荐,时间复杂度O(n),适合大数组)
先遍历一次数组用Map记录每个元素的出现次数,再遍历Map筛选出符合要求的元素:
function getOnlyOccurOnce(arr) { const countMap = new Map(); // 统计每个元素出现次数 arr.forEach(item => { countMap.set(item, (countMap.get(item) || 0) + 1); }); // 筛选出现次数为1的元素 return Array.from(countMap.entries()) .filter(([_, count]) => count === 1) .map(([item]) => item); } // 测试用例 const arr = [1,1,2,3,5,5]; console.log(getOnlyOccurOnce(arr)); // 输出 [2,3]
方案2:直接过滤(写法简洁,时间复杂度O(n²),适合小数组)
利用indexOf返回元素第一次出现的下标、lastIndexOf返回元素最后一次出现的下标,两者相等说明元素仅出现一次:
function getOnlyOccurOnce(arr) { return arr.filter(item => arr.indexOf(item) === arr.lastIndexOf(item)); } // 测试用例 const arr = [1,1,2,3,5,5]; console.log(getOnlyOccurOnce(arr)); // 输出 [2,3]
内容的提问来源于stack exchange,提问作者che2programmer
相关产品推荐
相关产品推荐

