如何去除包含字符串格式数字的JavaScript数组中的重复项?
处理混合数字与字符串数字的数组去重问题
你的问题核心在于默认去重逻辑用了**严格相等(===)**判断,数字1和字符串"1"会被判定为不同元素,导致去重不彻底。解决思路是先统一元素类型,再执行去重操作,以下是几种可行方案:
方案一:结合filter与Set高效去重
用Set快速记录已出现的数字,避免重复遍历,效率较高:
const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"]; const seen = new Set(); const uniqueArr = arr1.filter(item => { // 将元素统一转为数字类型 const num = Number(item); if (!seen.has(num)) { seen.add(num); return true; } return false; }); console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]
方案二:先统一类型再用Set去重
写法更简洁,先把所有元素转成数字,再利用Set自动去重的特性:
const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"]; const uniqueArr = [...new Set(arr1.map(item => Number(item)))]; console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]
方案三:仅用filter实现(无需额外数据结构)
如果不想依赖Set,可在filter内部遍历前置元素并统一类型判断:
const arr1 = [1,2,"1",3,2,4,"3",5,6,7,6,"5"]; const uniqueArr = arr1.filter((item, index, self) => { const currentNum = Number(item); // 检查当前元素之前的所有元素转成数字后是否重复 return self.slice(0, index).every(prev => Number(prev) !== currentNum); }); console.log(uniqueArr); // 输出:[1,2,3,4,5,6,7]
以上方案均能得到你期望的纯数字去重数组,其中方案一、二的时间复杂度更低,适合处理大体积数组。
内容的提问来源于stack exchange,提问作者user21951352
相关产品推荐
相关产品推荐

