构造

const set = new Set([1, 2, 3, 4, 4]);

可接受的参数为所有具有iterable 接口的数据  

特性:

类似数组,无重复值。

const set = new Set([1, 2, 3, 4, 4]);
[...set] //1,2,3,4

 注意点:

 1.成员值之间的重复值判断类似于‘===’,但是多个NaN会被判断为相等

const set = new Set([1,NaN, NaN, 4, '4']);
console.log(...set)

  2.两个对象总不相等 

const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]);
console.log(...set)

  

 3.无键只有值

const arr = [1,2,2,3,4,5,5,6]
let obj = {name:'shyno'}
const set = new Set(arr);
const setArr = Array.from(set)
console.log(Object.keys(arr),Object.keys(obj),Object.keys(set))

  

(可以看出set的键是空的)

  4.Set并不是数组

const set = new Set([{}, {},{name:'shyno'},{name:'shyno'}]);
document.write(set[0]) //undefined
console.log(set.concat([1,2])) //set.concat is not a function 

(1)Set可以用于数组去重,但是,需要把Set再转成数组

const set = new Set([1,2,3,3,4,4,5]);
const arr = Array.from(set)
console.log(arr[0],arr.concat(['1','2']))

  (2)Set也可以用于字符串去重

const set = new Set('aabbccdee');
const arr = Array.from(set)
console.log(arr[0],arr.concat(['1','2']))

  

  (3)其他具有iterable 接口的数据也可以用这种方法去掉重复的值

属性和方法

构造函数:Set.prototype.constructor

console.log(Set.prototype.constructor)

  

  长度/尺寸/成员总数:Set.prototype.size

const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
const setArr = Array.from(set)
console.log('原数组长度',arr.length,'set的成员总数',set.size,'set转数组之后的长度',setArr.length)

  

  添加成员:add()------添加某个值,返回 Set 结构本身

const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
set.add(2)
const setArr = Array.from(set)
console.log(set,set.add('shyno'))

  

(注意这里打印出来的结果一样,说明它的返回值就是set自身)

重复的不加,不同的数据类型也可以加

  删除成员:delete()------删除某个值,返回一个布尔值,表示删除是否成功

const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
const setArr = Array.from(set)
console.log(set)
console.log(set .delete(2))
console.log(set)
console.log(set .delete(2))

  

(set无重复值,所以同样的操作,只有第一次会成功)

  判断存在否:has(value)-----返回一个布尔值,表示该值是否为Set的成员

const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
const setArr = Array.from(set)
console.log(set)
console.log(set .has(2))
console.log(set .delete(2))
console.log(set .has(2))
console.log(set)

  

  

(这里明明打印set的时候没有2,但是has(2)确实true,删除操作后得到了false)

   清空成员:clear()-----清除所有成员,没有返回值

const arr = [1,2,2,3,4,5,5,6]
const set = new Set(arr);
const setArr = Array.from(set)
console.log(set)
console.log(set .clear())
console.log(set .delete(2))
console.log(set.add(2))
console.log(set .has(2))
console.log(set)

  

 

 

Set数据结构基本介绍的更多相关文章

  1. php数据结构课程---1、数据结构基础介绍(程序是什么)

    php数据结构课程---1.数据结构基础介绍(程序是什么) 一.总结 一句话总结: 程序=数据结构+算法 设计好数据结构,程序就等于成功了一半. 数据结构是程序设计的基石. 1.数据的逻辑结构和物理结 ...

  2. RedisTemplate访问Redis数据结构(介绍和常用命令)

    Redis 数据结构简介 Redis 可以存储键与5种不同数据结构类型之间的映射,这5种数据结构类型分别为String(字符串).List(列表).Set(集合).Hash(散列)和 Zset(有序集 ...

  3. pandas数据结构和介绍第一天

    pandans另种主要的数据结构Series和DateFranme 1,Series 仅由一组数据就而已产生简单的Series 2)Series 有index和values属性,表达索引对象 3)设置 ...

  4. python算法与数据结构-算法介绍(31)

    一.算法和数据结构 什么是算法和数据结构?如果将最终写好运行的程序比作战场,我们程序员便是指挥作战的将军,而我们所写的代码便是士兵和武器. 那么数据结构和算法是什么?答曰:兵法!故,数据结构和算法是一 ...

  5. [转]详细介绍java中的数据结构

    详细介绍java中的数据结构 本文介绍的是java中的数据结构,本文试图通过简单的描述,向读者阐述各个类的作用以及如何正确使用这些类.一起来看本文吧! 也许你已经熟练使用了java.util包里面的各 ...

  6. TokuDB介绍——本质是分形树(一个叶子4MB)+缓存减少写操作

    其性能特点见:http://www.cnblogs.com/billyxp/p/3567421.html TokuDB 是一个高性能.支持事务处理的 MySQL 和 MariaDB 的存储引擎.Tok ...

  7. redisbook笔记——redis内存映射数据结构

    虽然内部数据结构非常强大,但是创建一系列完整的数据结构本身也是一件相当耗费内存的工作,当一个对象包含的元素数量并不多,或者元素本身的体积并不大时,使用代价高昂的内部数据结构并不是最好的办法. 为了解决 ...

  8. 用js来实现那些数据结构—目录

    首先,有一点要声明,下面所有文章的所有内容的代码,都不是我一个人独立完成的,它们来自于一本叫做<学习JavaScript数据结构和算法>(第二版),人民邮电出版社出版的这本书.github ...

  9. 数据结构——基于java的链表实现(真正理解链表这种数据结构)

    原创不易,如需转载,请注明出处https://www.cnblogs.com/baixianlong/p/10759599.html,否则将追究法律责任!!! 一.链表介绍 1.什么是链表? 链表是一 ...

随机推荐

  1. hexo+腾讯云

    hexo+腾讯云主机搭建博客 参考链接1 参考链接2 参考链接3 说明:不建议用hexo在云主机上搭建博客,感觉多此一举,建议hexo+github, wordpress+云主机(宝塔界面更快哦) 一 ...

  2. [cf1137F]Matches Are Not a Child's Pla

    显然compare操作可以通过两次when操作实现,以下仅考虑前两种操作 为了方便,将优先级最高的节点作为根,显然根最后才会被删除 接下来,不断找到剩下的节点中(包括根)优先级最高的节点,将其到其所在 ...

  3. [loj519]数学上来先打表

    建立操作树,即1和3操作时i-1向i连边,2操作中k向i连边,然后dfs一遍 那么当我们走到一个节点,就执行该操作(修改也是操作),退出后取消该操作即可 于是相当于要维护一个东西,支持:1.加边:2. ...

  4. 【Azure 环境】在Windows环境中抓取网络包(netsh trace)后,如何转换为Wireshark格式以便进行分析

    问题描述 如何在Windows环境中,不安装第三方软件的情况下(使用Windows内置指令),如何抓取网络包呢?并且如何转换为Wireshark 格式呢? 操作步骤 1) 以管理员模式打开CMD,使用 ...

  5. [省选联考 2020 A 卷] 组合数问题

    题意 [省选联考 2020 A 卷] 组合数问题 想法 自己在多项式和数论方面还是太差了,最近写这些题都没多少思路,看完题解才会 首先有这两个柿子 \(k*\dbinom{n}{k} = n*\dbi ...

  6. 详细解析Thinkphp5.1源码执行入口文件index.php运行过程

    详细解析Thinkphp5.1源码执行入口文件index.php运行过程 运行了public目录下的index.php文件后,tp的运行整个运行过程的解析 入口文件index.php代码如下: < ...

  7. rust Option枚举

    枚举 1 fn main() { 2 let a_binding; 3 { 4 let x = 2; 5 a_binding = x * x; 6 } 7 println!("a bindi ...

  8. Oracle-like 多条件过滤以及and or用法

    1.select * from  file  where DOC_SUBJECT  not like '%测试%' and (DOC_STATUS like '待审' or DOC_STATUS li ...

  9. Python3调用C程序(超详解)

    Python3调用C程序(超详解) Python为什么要调用C? 1.要提高代码的运算速度,C比Python快50倍以上 2.对于C语言里很多传统类库,不想用Python重写,想对从内存到文件接口这样 ...

  10. C++中的排序

    下面网站解释比较好 http://www.cnblogs.com/heyonggang/archive/2013/11/03/3404371.html 1. qsort(C中的函数加上stdlib.h ...