在前端开发中,我们经常需要处理数组去重的问题。本文将介绍JavaScript中常用的6种去重方法,包括ES6及之前的实现方式,并提供每种方法的优缺点和适用场景。
1. 使用 Set
ES6引入了Set数据结构,可以用来去重一个数组。Set会自动忽略重复的值,只保留唯一的元素。
const arr = [1, 2, 3, 3, 4, 4, 5]; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // [1, 2, 3, 4, 5]
优点:代码简洁易懂,性能较好。
缺点:无法去重对象等非基本数据类型。
适用场景:数据类型为基本类型时使用。
2. 使用 filter
利用filter方法和indexOf方法对数组进行去重:
const arr = [1, 2, 3, 3, 4, 4, 5]; const uniqueArr = arr.filter((item, index) => { return arr.indexOf(item) === index; }); console.log(uniqueArr); // [1, 2, 3, 4, 5]
优点:可根据需求扩展过滤条件。
缺点:性能不如Set。
适用场景:数据量较小的情况下使用。
3. 使用 reduce
reduce()方法遍历数组,将每个元素转换为一个累加器值。我们可以通过判断计数器中是否已存在该元素,实现数组去重:
const arr = [1, 2, 3, 3, 4, 4, 5]; const uniqueArr = arr.reduce((acc, cur) => { if (!acc.includes(cur)) { acc.push(cur); } return acc; }, []); console.log(uniqueArr); // [1, 2, 3, 4, 5]
优点:可根据需求扩展过滤条件。
缺点:性能不如Set。
适用场景:数据量较小的情况下使用。
4. 使用 Map
Map是一种键值对的集合,可以通过key来区分不同的元素。我们可以利用Map的特性进行去重:
-- -------------------- ---- ------- ----- --- - --- -- -- -- -- -- --- ----- --- - --- ------ ----- --------- - --- ---------------- -- - -- ---------------- - ------------- ------ --------------------- - --- ----------------------- -- --- -- -- -- --
优点:可根据需求扩展过滤条件。
缺点:性能不如Set。
适用场景:数据类型为非基本类型时使用。
5. 使用 includes
includes()方法返回一个布尔值,表示某个数组是否包含给定的值。我们可以遍历原数组,在新数组中检查是否已经包含该元素,实现去重:
const arr = [1, 2, 3, 3, 4, 4, 5]; const uniqueArr = []; arr.forEach(item => { if (!uniqueArr.includes(item)) { uniqueArr.push(item); } }); console.log(uniqueArr); // [1, 2, 3, 4, 5]
优点:代码简单易懂。
缺点:性能不如Set。
适用场景:数据量较小的情况下使用。
6. 使用双重循环
最基本的方法是使用两层循环,比较每个元素是否与其他元素相同,如果不同,则将其加入新数组中:
const arr = [1, 2, 3, 3, 4, 4, 5]; const uniqueArr = []; for (let i = 0; i < arr.length; i++) { > 来源:[JavaScript中文网](https://www.javascriptcn.com/post/909) ,转载请注明来源 [https://www.javascriptcn.com/post/909](https://www.javascriptcn.com/post/909)