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
相关推荐
峥无3 天前
《C++ STL 关联式容器完全指南:深度解析 map 与 set 的使用》
开发语言·c++·set·map
optimistic_chen5 天前
【Redis 系列】常用数据结构---SET类型
linux·数据结构·数据库·redis·set·数据类型·命令行
西京刀客5 天前
Bash 脚本中的 ((i++)) || true 表达式详解( set -e 表达式陷阱)
bash·set·表达式
2301_7890156211 天前
C++:set/multiset和map/multimap文档详细解析
c语言·开发语言·c++·vscode·排序算法·set·map
王老师青少年编程15 天前
csp信奥赛C++标准模板库STL案例应用5
c++·stl·set·集合·标准模板库·csp·信奥赛
王老师青少年编程15 天前
csp信奥赛C++标准模板库STL案例应用7
c++·stl·set·集合·标准模板库·csp·信奥赛
思成不止于此19 天前
C++ STL中map与set的底层实现原理深度解析
开发语言·c++·set·map·红黑树·底层实现
MSTcheng.20 天前
【C++】set / multiset 保姆级教程:从底层原理到实战应用!
开发语言·c++·set
Queenie_Charlie1 个月前
数字去重(set)
数据结构·c++·set
Queenie_Charlie1 个月前
小明统计数组
数据结构·c++·set