JS数据结构--集合Set

集合

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。是 ES6 新增的数据类型!

这里我们来手写实现一个模拟Set

❑ add(element):向集合添加一个新元素。
❑ delete(element):从集合移除一个元素。
❑ has(element):如果元素在集合中,返回true,否则返回false。
❑ clear():移除集合中的所有元素。
❑ size():返回集合所包含元素的数量。它与数组的length属性类似。
❑ values():返回一个包含集合中所有值(元素)的数组。

// Set集合  JS在ES2015加入了 Set 和 Map
/*
❑ add(element):向集合添加一个新元素。
❑ delete(element):从集合移除一个元素。
❑ has(element):如果元素在集合中,返回true,否则返回false。
❑ clear():移除集合中的所有元素。
❑ size():返回集合所包含元素的数量。它与数组的length属性类似。
❑ values():返回一个包含集合中所有值(元素)的数组。
*/

class $Set{
  constructor(){
    this.items={}
  }
  
  add(element){
    if(this.has(element)) return false
    this.items[element]=element
    return true
  }
  
  delete(element){
    try{
    delete this.items[element]
    return true
    }catch{
      return false
    }
  }
  
  has(element){
    // return element in this.items    以下更好
    return Object.prototype.hasOwnProperty.call(this.items, element);
  }
  
  clear(){
    this.items={}
    return true
  }
  
  size(){
    // return Object.keys(this.items).length    这个太简单了
      let count = 0;
      for(let key in this.items) { // {2}
        if(this.items.hasOwnProperty(key)) { // {3}
            count++;   // {4}
      }
      return count;
    }
  }
  
  values(){
    // return Object.values(this.items)      这个也是
      let values = [];
      for(let key in this.items) { // {1}
        if(this.items.hasOwnProperty(key)) {
          values.push(key); // {2}
        }
      }
      return values;
  }
}

// 集合运算
/*
❑ 并集:对于给定的两个集合,返回一个包含两个集合中所有元素的新集合。
❑ 交集:对于给定的两个集合,返回一个包含两个集合中共有元素的新集合。
❑ 差集:对于给定的两个集合,返回一个包含所有存在于第一个集合且不存在于第二个集合的元素的新集合。
❑ 子集:验证一个给定集合是否是另一集合的子集。
*/



// console.log(set.add(1))
// console.log(set.add(3))
// console.log(set.add('a'))
// console.log(set.has(3))
// console.log(set.size())
// console.log(set.values())
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

寂林Lin

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值