Set数据类型的应用

news/2024/7/10 23:47:14 标签: javascript, es6

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

    • Set的定义?

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

    • 创建Set数据结构?

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

javascript">javascript">const set = new Set();

3.Set数据的应用

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

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

javascript">javascript">    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的基础属性

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

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

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

javascript">javascript">   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)
        );
    }
  },


http://www.niftyadmin.cn/n/854841.html

相关文章

【强烈推荐】说说CSS Hack 和向后兼容

人一旦习惯了某些东西就很难去改,以及各种各样的原因,新的浏览器越来越多,而老的总淘汰不了。增长总是快于消亡导致了浏览器兼容是成了谈不完的话题。说到浏览器兼容,CSS HACK自然而然地被我们想起。今天,我们通常都有…

这一定是个误会

本文转载自 http://shihb.blog.sohu.com/157291301.html 今天收到几位朋友的短信:“新文又被屏蔽了,节哀。”上网后,看到《中国是美国经济的大救星》果然被屏蔽了。但是,我觉得这一定是个误会。这篇文章没有配发穿着简单的图片&…

爱情发展流程图----据说是一程序员分析的

七夕情人节快乐 转载于:https://www.cnblogs.com/jojochi_008/archive/2010/08/16/1800550.html

clamAV

跟踪PE文件调试过程(略去病毒库加载编译阶段) 文字描述如下: l 判断文件类型,此处为exe l 采用raw方式扫描,即把整个文件看成一个字符串进行扫描 l 采用pe文件格式扫描转载于:https://www.cnblogs.com/candybox/archiv…

下面属于javascript内部对象的有_面向对象的 JavaScript:封装、继承与多态

本文作者:家园工作室研发组成员 维尔希宁 本文出处:面向对象的 JavaScript:封装、继承与多态​blog.lenconda.top本文遵循署名-非商业性使用-禁止演绎3.0 未本地化版本(CC BY-NC-ND 3.0)协议发布,使用本文时…

NeHe OpenGL第四十三课:FreeType库

NeHe OpenGL第四十三课:FreeType库 在OpenGL中使用FreeType库 使用FreeType库可以创建非常好看的反走样的字体,记住暴雪公司就是使用这个库的,就是那个做魔兽世界的。尝试一下吧,我只告诉你了基本的使用方式,你可以走的…

AMD Bulldozer确认不支持所谓 逆向超线程 技术

每每谈到推土机,总会有一群人跳出来拿所谓的Anti-HT 逆向超线程技术YY,说其能用两个核心同时执行一个线程,从而大幅度提升单线程性能。虽不知道这说法根据何来,但貌似连某些媒体也信以为真了。 但事实上,AMD官方从未宣…

kafka如何保证不重复消费又不丢失数据_Spark消费Kafka如何实现精准一次性消费?...

1.定义 精确一次消费(Exactly-once) 是指消息一定会被处理且只会被处理一次。不多不少就一次处理。如果达不到精确一次消费,可能会达到另外两种情况:至少一次消费(at least once),主要是保证数据不会丢失,但有可能存在数据重复问题…