Set数据类型的应用

JS的复杂类型常见的就是Map,Object,Array,对于Set类型的数据是比较少见的。

    • Set的定义?

Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用,Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。

    • 创建Set数据结构?

在ES6之后新增的set数据可以直接通过new去创建。

const set = new Set();

3.Set数据的应用

  1. 场景1:数组对象去重。

对于数组对象去重,由于数组的每一个元素都是对象,无法直接使用== 去进行判断,所以可以将数组对象转换成JSON字符串。

    let objarr = [
      { name: 1, sex: 1 },
      { name: 2, sex: 1 },
      { name: 3, sex: 1 },
    ]; // 创建数组
    let resArr = []
    let tempArr = objarr.map(item=>JSON.stringify(item))//将数组的每一个元素转换成JSON数据
    tempArr = [...new Set(tempArr)] //利用set 的属性去重
    temp.forEach((item: any) => {
        resArr.push(JSON.parse(item));
      }); //将JSON字符串转换成对象
    

4.set的基础属性

const set = new Set()
//往set添加元素
set.add(1)
//判断set是否包含某个属性
set.has(1) // 返回true 或 false
//删除set的属性
set.delete(1)

利用set的这些属性可以实现俩个数组对象之间的交集,并集以及差集。

数组对象还是要先转换成JSON数据后再进行操作,如果你的数组是常规数组,则可省略该步骤。

   function getSameItem(arr1: any, arr2: any, type: string) {
      let set_1 = new Set();
      let set_2 = new Set();
      let temp_1: any = []; 
      let temp_2: any = [];
      arr1.forEach((item) => {
        temp_1.push(JSON.stringify(item));
      });
      arr2.forEach((item) => {
        temp_2.push(JSON.stringify(item));
      });

      temp_2.map((item) => {
        set_2.add(item);
      });
      // 并集
      if (type == "union")
        return [...new Set([...temp_2, ...temp_1])].map((item) =>
          JSON.parse(item)
        );
      //交集
      if (type == "intersect")
        return [...new Set([...temp_1].filter((x) => set_2.has(x)))].map(
          (item) => JSON.parse(item)
        );
      if (type == "difference")
        return [...new Set([...temp_1].filter((x) => !set_2.has(x)))].map(
          (item) => JSON.parse(item)
        );
    }
  },

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值