首页 > 其他分享 >set用法详解

set用法详解

时间:2024-01-23 19:45:04浏览次数:23  
标签:arr Set const name 用法 set console 详解 log

  1. ES6中的Set是一种新的数据结构,类似于数组,用于存储有序的数据。

  2. Set没有随机访问的能力,不能通过索引来获取具体的某个元素

  3. Set中的元素具有唯一性,不允许存储相同的元素。

  • Set本身是一个构造函数,可以用来实例化Set对象。

  • 通过add()方法可以向Set中添加元素,如果添加的元素已经存在,Set会自动忽略该元素。

  • delete()用于删除元素,

  • setData.size用于获取Set对象的大小(相当于数组的长度),

  • clear()用于清空数据,

  • has()用于判断Set对象中是否存在某个值等。

  • Set对象可以用来进行各种集合操作,例如交集、差集等,具有自动去重唯一性的特点。

 

      //1.声明方式
      let arr = new Set();
      arr.add({ name: "zooey", age: 19 });
      arr.add(20);
      //2.查看元素长度
      const size = arr.size;
      //2.1查看是否有这个元素,可以跟delete配合使用
      console.log(arr.has(20), size);
      //3.根据元素值进行删除
      arr.delete(20);
      //4.重复的元素只会add 1次
      arr.add(3);
      arr.add(3);
​
      arr.add({ name: "zooeyan", age: 19 });
      console.log(arr);

 

 


 

小练习: 数组去重+取交集+取并集+取差集

    
     let arr1 = [1, 3, 4, 4, 5, 7, 7, 9, 10],
        arr2 = [2, 4, 6, 8, 8, 10];
      //1.利用set进行去重  将arr转化为set
      let setArr1 = new Set(arr1);
      let setArr2 = new Set(arr2);
      console.log(setArr1, setArr2); //Set(7) {1, 3, 4, 5, 7,9, 10}  Set(5) {2, 4, 6, 8, 10}
​
      //2.进行比较 -取交集
      const targetArr = [];
      for (const it of setArr2) {
        if (setArr1.has(it)) targetArr.push(it);
      }
      console.log(targetArr); //[4, 10]
      //2.进行比较 -取并集
      const tempArr = [];
      for (const it of setArr2) {
        if (!setArr1.has(it)) tempArr.push(it);
      }
      const bArr = [...tempArr, ...setArr1];
      console.log(bArr); //[2, 6, 8, 1, 3, 4, 5, 7, 9, 10]
​
      //3.进行比较 -取差集 arr1-arr2
      const cArr = [];
      for (const it of setArr1) {
        if (!setArr2.has(it)) cArr.push(it);
      }
      console.log(cArr); // [1, 3, 5, 7, 9]

 

官方是这样做的,更简洁一些

// 可以通过如下代码模拟求交集
const intersection = new Set([...mySet1].filter((x) => mySet2.has(x)));

// 可以通过如下代码模拟求差集
const difference = new Set([...mySet1].filter((x) => !mySet2.has(x)));

 

此外,还有entries()、values()、keys()

 let collection = new Set([
        { name: "zooey", age: 18 },
        { name: "anan", age: 19 },
        { name: "bobo", age: 20 },
      ]);
      //1.entries()
​
      for (const [key, value] of collection.entries()) {
        console.log(key, value); //key: {name: 'zooey', age: 18} value: {name: 'zooey', age: 18}
      }
      //2.keys()
​
      for (const item of collection.keys()) {
        console.log(item); // {name: 'zooey', age: 18}
      }
​
      //3.values()
      for (const item of collection.values()) {
        console.log(item); // {name: 'zooey', age: 18}
      }

 

 

标签:arr,Set,const,name,用法,set,console,详解,log
From: https://www.cnblogs.com/zry123/p/17983277

相关文章

  • [转]Linux下的lds链接脚本详解
    [转]Linux下的lds链接脚本详解转载WZM35588622016-12-0611:40:20文章标签QT文章分类运维阅读数2546 [转]Linux下的lds链接脚本详解转载自: http://linux.chinaunix.net/techdoc/beginner/2009/08/12/1129972.shtml  一、概论每一个链接过程都由链接......
  • makefile文件详解
    1.make编译:将源代码文件翻译成处理器可执行的二进制文件的过程,这个过程的时间区间称为编译时构建:指定多个编译过程的先后顺序make命令是常用的构建工具,诞生于1977年,主要用于C/C++项目工程的构建,make命令的适用场景:只要某一个或多个文件发生变动,就要重新构建项目2.Makefi......
  • 详解avcodec_encode_video2 AVERROR(EAGAIN)
    详解avcodec_encode_video2AVERROR(EAGAIN)在视频编码过程中,可能会遇到错误码AVERROR(EAGAIN)。本篇技术博客将详细解释avcodec_encode_video2函数中的AVERROR(EAGAIN)错误码的含义,并讨论可能的原因和解决方案。什么是avcodec_encode_video2?avcodec_encode_video2是FFmpeg(一个流行......
  • uniapp打包h5在Android的webview中打开出现localStorage.setitem为null的记录
    使用android直接打开h5的链接,报错localStorage.setItem为null原因是要打开Android的webview的存储设置valwebView=findViewById<WebView>(R.id.webview)valsettings=webView.settingssettings.domStorageEnabled=truesettings.datab......
  • Java resultset判断mysql表是否存在
    importjava.sql.*;publicclassCheckTableExistence{publicstaticvoidmain(String[]args)throwsSQLException{Stringurl="jdbc:mysql://localhost:3306/mydatabase";//MySQL服务器地址及数据库名称Stringusername="root"......
  • 死锁详解
    什么是死锁?死锁是指两个或多个进程在执行过程中,因争夺资源而造成的一种相互等待的现象,如果没有外力干涉,这些进程将永远无法继续执行死锁通常发生在多个进程试图同时访问同一资源而无法获取的情况下,例如,进程A需要访问资源C,进程B需要访问资源D,如果进程A获取了资源C的锁,......
  • 神经网络优化篇:详解局部最优的问题(The problem of local optima)
    局部最优的问题在深度学习研究早期,人们总是担心优化算法会困在极差的局部最优,不过随着深度学习理论不断发展,对局部最优的理解也发生了改变。向展示一下现在怎么看待局部最优以及深度学习中的优化问题。这是曾经人们在想到局部最优时脑海里会出现的图,也许想优化一些参数,把它们称......
  • 基于信号量的环形队列的生成消费模型(万字长文详解)
    linux线程之信号量POSIX信号量阻塞队列的缺陷==这是一个我们自己的实现阻塞队列!==classBlockQueue{public:BlockQueue(constint&maxcap=gmaxcap):maxcap_(maxcap){pthread_mutex_init(&mutex_,nullptr);......
  • mysql之my.cnf详解
    值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;relay-log-purge=1#是否自动清空不再需要中继日志时。默认值为1(启用)expire_logs_days=30#超过30天的binlog删除binlog_cache_size=1M#在一个事务中......
  • MySQL线程状态详解
    前言:我们常用showprocesslist或showfullprocesslist查看数据库连接状态,其中比较关注的是State列,此列表示该连接此刻所在的状态。那么你真的了解不同State值所表示的状态吗?下面我们参考官方文档来一探究竟。以MySQL5.7版本为例官方文档地址:https://dev.my......