数组去重方法

张开发
2026/4/3 16:16:56 15 分钟阅读
数组去重方法
✅ 一、最简单推荐首选 使用SetES6const arr [1, 2, 2, 3, 4, 4]; const result [...new Set(arr)]; console.log(result); // [1, 2, 3, 4]✔ 优点写法最简洁性能好接近 O(n)✔ 缺点无法处理对象去重引用不同✅ 二、使用filterconst arr [1, 2, 2, 3, 4, 4]; const result arr.filter((item, index) { return arr.indexOf(item) index; }); console.log(result);✔ 原理只保留第一次出现的位置❗ 缺点性能较差O(n²)✅ 三、使用reduceconst arr [1, 2, 2, 3, 4, 4]; const result arr.reduce((acc, cur) { if (!acc.includes(cur)) { acc.push(cur); } return acc; }, []); console.log(result);✔ 适合理解函数式编程✅ 四、使用Map推荐处理复杂数据const arr [1, 2, 2, 3, 4, 4]; const map new Map(); const result []; arr.forEach(item { if (!map.has(item)) { map.set(item, true); result.push(item); } }); console.log(result);✔ 优点性能好可扩展对象去重 五、对象数组去重面试重点 按某个字段去重const arr [ { id: 1, name: a }, { id: 1, name: b }, { id: 2, name: c } ]; const map new Map(); const result arr.filter(item { if (!map.has(item.id)) { map.set(item.id, true); return true; } return false; }); console.log(result); 六、终极通用写法封装函数function unique(arr, key) { const map new Map(); return arr.filter(item { const value key ? item[key] : item; if (!map.has(value)) { map.set(value, true); return true; } return false; }); }使用unique([1, 2, 2, 3]); unique([{id:1},{id:1}], id);⚠️ 七、面试加分点必须知道1️⃣Set去重不了对象[{a:1}, {a:1}] // ❌ 还是两个原因 引用地址不同2️⃣ 性能排序面试常问方法时间复杂度Set⭐ O(n)Map⭐ O(n)filter❌ O(n²)includes❌ O(n²)3️⃣ 特殊值问题NaN NaN // false 但new Set([NaN, NaN]) // ✅ 只保留一个✍️ 总结一句话简单数据用 Set复杂数据用 Map面试优先讲这两个

更多文章