ES6 Set的使用, 数组去重 如此简单

本文深入探讨ES6中引入的Set数据结构,这是一种类似数组但确保元素唯一性的新型数据结构。文章详细介绍了如何利用Set进行数组去重,并列举了Set的常用操作方法,如add、delete、has和clear。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Set是ES6提供新的一种数据结构。类似于数组,但是成员元素的值都是唯一的,没有重复的值。接收数组作为参数,所以可以用来用作数组的去重使用

let arr = new Set([[1,1,2,2,2,3,4,4,4,4,5,6]])

console.log(arr)

//[1,2,3,4,5,6]

可以使用new Set().size来查看不重复的数组元素长度

另外Set 有几个操作方法

  • add(value):添加某个值,返回Set结构本身 

  • delete(value):删除某个值,返回一个布尔值,表示删除是否成功。
  • has(value):返回一个布尔值,表示该值是否为Set的成员。
  • clear():清除所有成员,没有返回值

add()

let arr = new Set([1])
arr.add(1) //1
arr.add(2) //1,2

delete()

let arr = new Set([1,2])
arr.delete(1) // 2

has()

let arr = new Set([1,2])

arr.has(3) // false
arr.has(1) // true

clear()

let arr = new Set([1,2])

arr.clear() // []

 

### 使用ES6特性实现数组ES6中,可以通过多种方法实现数组。以下是几种常见的方法: #### 方法一:使用 `Set` 和扩展运算符 `Set` 是 ES6 引入的一种数据结构,它只允许存储唯一的值。通过将数组转换为 `Set`,可以自动复的元素。然后使用扩展运算符 `[...]` 将 `Set` 转换回数组[^1]。 ```javascript const arr = [1, 2, 3, 4, 4, 5, 5, 6, 6]; const uniqueArr = [...new Set(arr)]; console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5, 6] ``` #### 方法二:使用 `Array.from` 和 `Set` 另一种方式是结合 `Set` 和 `Array.from` 方法。`Array.from` 可以将类数组对象或可迭代对象转换为真正的数组[^4]。 ```javascript let arr = [1, 1, 1, 2, 2, 3, 3, 3, 4, 4]; let set = new Set(arr); let uniqueArr = Array.from(set); console.log(uniqueArr); // 输出: [1, 2, 3, 4] ``` #### 方法三:使用 `filter` 和 `indexOf` 除了利用 `Set`,还可以通过 `filter` 和 `indexOf` 的组合来实现数组。`indexOf` 方法返回数组中某个指定元素的第一个索引,如果当前元素的索引与 `indexOf` 返回的索引相同,则说明它是第一次出现[^2]。 ```javascript var arr = [1, 2, 3, 2, 2, 4, 5, 6]; var uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index); console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5, 6] ``` #### 方法四:使用 `reduce` 实现数组 `reduce` 方法可以用来遍历数组,并通过累加器收集唯一值。这种方法更加灵活,适合处理复杂场景下的需求[^3]。 ```javascript const arr = [1, 2, 3, 2, 2, 4, 5, 6]; const uniqueArr = arr.reduce((acc, cur) => { if (!acc.includes(cur)) { acc.push(cur); } return acc; }, []); console.log(uniqueArr); // 输出: [1, 2, 3, 4, 5, 6] ``` 以上方法各有优劣,具体选择取决于实际应用场景和性能要求。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值