美文网首页
JS版数据结构-集合

JS版数据结构-集合

作者: 每日log | 来源:发表于2020-12-17 13:10 被阅读0次

    一、集合

    01.集合简介

    集合是无序且唯一的数据结构,可以把集合想象成一个既没有重复元素,也没有顺序概念的数组。
    JS中没有集合这个数据结构。
    ES6 中的数据结构 Set,每个成员的值都是唯一的,且没有重复的值,正好满足集合的定义。我们可以用Set模拟集合的数据结构。

    首先介绍下es6的数据结构Set。

    二、Set

    01. Set简介

    Set对象是值的集合,你可以按照插入的顺序迭代它的元素。
    Set中的元素只会出现一次,即 Set 中的元素是唯一的。

    Set本身是一个构造函数

    const set = new Set();
    

    02. Set常用属性

    size:
    含义:返回Set对象中元素的个数

    const set = new Set();
    set.add(1).add(2).add(3);
    console.log(set.size) // 3
    

    03. Set常用方法

    01. add

    add()
    含义:添加值
    返回:Set 结构本身

    const set = new Set();
    

    02. delete

    delete()
    含义:删除值
    返回:布尔值,表示删除是否成功

    set.delete(2) // 删除 set 结构中的2值 
    

    03. has

    has()
    含义:是否存在某个值
    返回:返回一个布尔值,表示该值是否为 Set 的成员

    const c = set.has(1) // 表示 set 结构中是否有1这个值 返回布尔值
    

    04. clear

    clear()
    含义:清空所有值
    返回:无

    set.clear()
    

    05. values

    values()
    含义:按照元素插入顺序返回一个具有 Set 对象每个元素值的全新 Iterator 对象。

    const set = new Set();
    

    06. forEach

    forEach()
    含义:遍历

    set.forEach(value => {
    

    三、用set模拟集合的运算

    常用的集合运算有:并集,交集,差集,子集

    const set1 = new Set();
    

    我们新创建2个set结构,set1中存储为a,b,c,set1中存储为d,e,a

    01. 并集

    并集:
    含义:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合。

    const set3 = new Set()
    set1.forEach(value => {
        set3.add(value)
    })
    set2.forEach(value => {
        set3.add(value)
    })
    console.log(set3) // {"a", "b", "c", "d", "e"}
    

    使用forEach依次遍历元素添加到新的集合中。

    02. 交集

    交集:
    含义:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。

    const set3 = new Set([...set1].filter(item => set2.has(item)))
    

    使用数组的filter方法筛选出set2中存在的值和set1对比。

    03. 差集

    差集:
    含义:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合。

    const set3 = new Set([...set1].filter(item => !set2.has(item)))
    

    对于差集有两种情况,存在set1中但是不存在set2的值,和存在set2中但是不存在set1的值。

    04. 子集

    子集:
    含义:验证一个给定集合是否是另一集合的子集

    const set3 = [...set1].every(item => {set2.has(item)})
    

    every方法可以测试一个数组内的所有元素是否都能通过某个指定函数的测试,此时可以检测set2的元素是否在set1存在,还有另外一个条件,set1的size应该大于set2.size。

    思考:

    用两个圆如何模拟集合运算?

    image

    查看更多

    https://mp.weixin.qq.com/s/8CWdL9sRNelo6zll9tBFdw

    相关文章

      网友评论

          本文标题:JS版数据结构-集合

          本文链接:https://www.haomeiwen.com/subject/yliwgktx.html