• 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基本用法

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

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

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

    1. let arr = [1,2,3];
    2. let obj = {
    3. a:1
    4. }
    5. console.log( arr instanceof Array);//true
    6. console.log( obj instanceof Object);//true
    7. console.log( Object.prototype.toString.call(arr));//[object Array]
    8. console.log( Object.prototype.toString.call(obj));//[object Object]
    9. let set = new Set([1,2,3,4]);
    10. console.log( set instanceof Set);//true
    11. console.log( Set.prototype.toString.call(set));//[object Set]

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

    1. let set = new Set([1,2,3,4]);
    2. let arr1 = Array.from(set);
    3. let arr2 = [...set];
    4. 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数据内部认为相等
    1. let set = new Set();
    2. let a = 5;
    3. let b = '5';
    4. set.add(a);
    5. set.add(b);
    6. console.log(Array.from(set))// [5, '5']

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

    1. let set = new Set();
    2. set.add({});
    3. set.add({});
    4. console.log(...set);// 此时有两项 {} {}

    9.set实例的属性和方法

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

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

    1. let arr1 = [1, 2, 3]
    2. let arr2 = [4, 3, 2]
    3. // 实现交集
    4. console.log(new Set([...arr1, ...arr2]));//{1, 2, 3, 4}
    5. let c = new Set([...arr1, ...arr2]);
    6. let a = new Set(arr1); // 1,2,3
    7. let b = new Set(arr2); //4, 3, 2
    8. // 实现并集(has()方法和filter()方法结合)
    9. console.log(new Set([...a].filter(a => b.has(a))));//{2, 3}
    10. // 实现差集(a对于b的差集和b对于a的差集不一样)
    11. console.log(new Set([...a].filter(item => !b.has(item))));// 1
    12. console.log(new Set([...b].filter(item => !a.has(item))));// 4

  • 相关阅读:
    数据分析、数据挖掘常用的数据清洗方法
    day10 分布式缓存
    UG NX二次开发(C++)-采用std::vector对体对象的质心进行排序
    Objective-C——基础知识4(description关键字)
    【Matplotlib绘制图像大全】(十二):嵌套饼图
    Terraform 系列-使用 for-each 对本地 json 进行迭代
    【SQL】新建库表时,报错attempt to write a readonly database
    【Java】Stream流水线实现
    【通义千问】大模型Qwen GitHub开源工程学习笔记(3)-- 通过Qwen预训练语言模型自动完成给定的文本
    数据库错误知识集2
  • 原文地址:https://blog.csdn.net/qq_34569497/article/details/133887804