ES6 Set数据结构

1.Set 是什么

Set是新的引用型的数据结构 它类似于数组,但是成员的值都是唯一 的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构。

Set函数可以接受一个数组作为参数,用来初始化。

2.Set特性(重点概括)

重点

  • 1.成员不能重复
  • 2.属于引用数据类型,可以使用 set instanceof Set 或者 Object.prototype.toString.call(set)判断是否为Set类型
  • 3.可以通过Array.from(set)或者 扩展运算符 [...set]转为数组
  • 4.可以通过new Set(arr)进行数组去重
  • 5.Set的属性和方法 add(),has(),delete(),clear(), size属性
  • 6.引用数据类型比较的是地址是否相等,所以Set可以重复添加对象,因为不同对象地址不一样
  • 7.Set数据类型遍历:forEach(),for...of遍历
  • 8.通过Set实现数组的并集net Set([...arr1,...arr2])、交集(a转为Set,filter遍历b在a的Set中存在has())、差集(a转为Set,遍历b在a的Set中是否不存在)

3.Set基本用法

javascript 复制代码
const set = new Set([1, 2, 3, 4, 4]);
console.log(set); // Set(4) {1, 2, 3, 4}

4.怎么证明Set是新的引用类型的数据结构instanceof或者Object.prototype.toString.call(set)

先想一想 以前怎么判断是数组还是对象的?instanceof或者Object.prototype.toString.call(set)

javascript 复制代码
        let arr = [1,2,3];
        let obj = {
            a:1
        }

        console.log( arr instanceof Array);//true
        console.log( obj instanceof Object);//true
        console.log( Object.prototype.toString.call(arr));//[object Array]
        console.log( Object.prototype.toString.call(obj));//[object Object]

        let set = new Set([1,2,3,4]);
        console.log( set instanceof Set);//true
        console.log( Set.prototype.toString.call(set));//[object Set]

5.将Set数据类型转化成数组(通过扩展运算符[...set]或者 Array.from(set))

javascript 复制代码
        let set = new Set([1,2,3,4]);
        let arr1 = Array.from(set);
        let arr2 = [...set];
        console.log(arr1,arr2);//(4) [1, 2, 3, 4]

6.通过Set对数组去重 let arr1 = new Set(arr)

7.Set数据内部判断值的机制

  • Set数据内部判断值的机制:Set 内部判断两个值是否不同,使用的算法它类似于精确相等运算符(===),如5和"5"是两个不同的值
  • 特殊情况就是NaN的情况: 虽然NaN === NaN 返回false(其实NaN == NaN也会返回false),但是在Set数据内部认为相等
javascript 复制代码
        let set = new Set();
        let a = 5;
        let b = '5';
        set.add(a);
        set.add(b);
        
        console.log(Array.from(set))// [5, '5']

8.Set数据结构中两个对象总是不相等的。(因为{} === {} 返回false 其实 {}=={}也是返回false)

javascript 复制代码
let set = new Set();
set.add({});
set.add({});

console.log(...set);// 此时有两项 {} {}

9.set实例的属性和方法

  • 属性size
  • 方法 add() delete() has() clear()
  • 遍历方法forEach():Set 结构的实例与数组一样,也拥有forEach方法,用于对每个成员执行某种操作,没有返回值。

10.Set和展开运算符...实现数组的并集 交集 差集

javascript 复制代码
        let arr1 = [1, 2, 3]
        let arr2 = [4, 3, 2]
        // 实现交集
        console.log(new Set([...arr1, ...arr2]));//{1, 2, 3, 4}
        let c = new Set([...arr1, ...arr2]);
        let a = new Set(arr1); // 1,2,3
        let b = new Set(arr2); //4, 3, 2
        // 实现并集(has()方法和filter()方法结合) 
        console.log(new Set([...a].filter(a => b.has(a))));//{2, 3}
        // 实现差集(a对于b的差集和b对于a的差集不一样)
        console.log(new Set([...a].filter(item => !b.has(item))));// 1
        console.log(new Set([...b].filter(item => !a.has(item))));// 4
相关推荐
胡西风_foxww1 天前
【es6复习笔记】集合Set(13)
前端·笔记·es6·set·集合
坚持不懈的大白12 天前
Java:集合(List、Map、Set)
java·list·set·map·collection
冷眼看人间恩怨13 天前
【C++】关联存储结构容器-set(集合)详解
开发语言·c++·set
NPE~22 天前
Go实现List、Set、Stack、Deque等数据结构
数据结构·golang·list·set·deque·stack
瞌睡不来23 天前
(C++ STL) set、multiset、map、multimap 类的简单模拟实现与源码展示
数据结构·c++·学习·二叉树·set·map·c++ stl
zxctsclrjjjcph1 个月前
【OJ】前K个高频单词和单词识别和两个数组的交集
c++·力扣·set·map·oj
小柯J桑_1 个月前
C++:用红黑树封装map与set-2
开发语言·c++·set·map·红黑树
小柯J桑_1 个月前
C++:用红黑树封装map与set-1
开发语言·c++·set·map·红黑树
做人不要太理性1 个月前
C++:基于红黑树封装map和set
开发语言·数据结构·c++·算法·set·map·红黑树
小柯J桑_2 个月前
C++:set详解
c++·set