什么是 Set?
Set 是 ECMAScript 2016 新提供的一种数据结构,类似于数组,但是成员的值都是唯一的,没有重复的值。
Set 对象可以通过 new Set([iterable]) 创建,其中 iterable 参数表示可迭代的对象(如 Array 和 String),用于将其所有成员加入到 Set 中。
例如,以下代码可以创建一个 Set 对象:
const set = new Set([1, 2, 3, 4, 5]);
这个 Set 对象包含了 5 个成员,即 1、2、3、4、5。
Set 的应用场景
Set 的独特性质使得它在实际开发中有很多应用场景。下面介绍 Set 的一些常见应用场景。
数组去重
如果需要对一个数组进行去重,可以使用 Set 对象。由于 Set 中不能有重复的成员,所以将数组转换为 Set 对象后,再将 Set 对象转换为数组即可去重。
以下代码演示了如何对数组进行去重:
const arr = [1, 2, 2, 3, 3, 3, 4, 5, 5]; const set = new Set(arr); const uniqueArr = Array.from(set); console.log(uniqueArr); // [1, 2, 3, 4, 5]
判断是否包含某个元素
Set 对象提供了 has 方法来判断一个 Set 对象是否包含某个元素。
以下代码演示了如何使用 has 方法来判断 Set 中是否包含某个元素:
const set = new Set([1, 2, 3, 4, 5]); console.log(set.has(3)); // true console.log(set.has(6)); // false
交集、并集、差集
如果需要对两个集合进行交集、并集、差集等操作,可以将两个 Set 对象转换为数组后,再通过数组方法来完成操作。
以下代码演示了如何对两个 Set 对象进行交集、并集、差集等操作:
// javascriptcn.com 代码示例 const set1 = new Set([1, 2, 3, 4, 5]); const set2 = new Set([4, 5, 6, 7, 8]); // 交集 const intersection = Array.from(new Set([...set1].filter(x => set2.has(x)))); console.log(intersection); // [4, 5] // 并集 const union = Array.from(new Set([...set1, ...set2])); console.log(union); // [1, 2, 3, 4, 5, 6, 7, 8] // 差集 const difference = Array.from(new Set([...set1].filter(x => !set2.has(x)))); console.log(difference); // [1, 2, 3]
Set 的注意事项
使用 Set 对象时需要注意以下几点。
Set 中的 NaN
由于 NaN 不等于任何值(包括它本身),所以在 Set 中可以添加多个 NaN 值。
以下代码演示了如何在 Set 中添加多个 NaN 值:
const set = new Set(); set.add(NaN); set.add(NaN); console.log(set.size); // 1
Set 中的对象
Set 对象通过引用来判断是否相等。因此,如果两个对象的引用不同,即使它们的属性完全一样,它们也会被 Set 视为两个不同的对象。
以下代码演示了如何在 Set 中添加多个对象:
const set = new Set(); set.add({name: 'Tom', age: 20}); set.add({name: 'Tom', age: 20}); console.log(set.size); // 2
总结
Set 是 ECMAScript 2016 中新增的数据结构,具有独特的应用场景。在实际开发中,可以使用 Set 对象来对数组进行去重、判断某个元素是否存在、计算交集、并集、差集等操作。需要注意的是,Set 中可以添加多个 NaN 值,而且在判断对象是否相等时,是通过引用来进行的。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/653228897d4982a6eb46dcb9