构造

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. 菜鸡的Java笔记 第四 - java 基础运算符

    数学运算符,逻辑运算,三目运算,位运算 double d2 = 314e2; //采用科学计数法的写法,表示10的2次方.= 31400.0 代码写的越简单越好   简化运算符 代码:x=x+y 可以 ...

  2. react之redux状态管理

    1.传统MVC框架的缺陷 模型(model)-视图(view)-控制器(controller)的缩写 V即View视图:用户看到并与之交互的界面. M即Model模型是管理数据:很多业务逻辑都在模型中 ...

  3. 测试平台系列(80) 封装Redis客户端

    大家好~我是米洛! 我正在从0到1打造一个开源的接口测试平台, 也在编写一套与之对应的完整教程,希望大家多多支持. 欢迎关注我的公众号测试开发坑货,获取最新文章教程! 回顾 上一节我们编写了Redis ...

  4. 【Java面试题】-- Java基本类型

    Java基本类型 2019-11-03  19:03:48  by冲冲 1.两个float型相减丢失精度,如何解决? 使用BigDemical装饰器模式 public class Test { pub ...

  5. Redis | 第5章 Redis 中的持久化技术《Redis设计与实现》

    目录 前言 1. RDB 持久化 1.1 RDB 文件的创建与载入 1.2 自动间隔性保存 1.2.1 设置保存条件 1.2.2 dirty 计数器和 lastsave 属性 1.2.3 检查保存条件 ...

  6. app如何测试

    你的app是如何测试?  考虑UI界面测试,在测试主体的功能模块,考虑异常测试,关机,卡死,重启...,  交互性测试,手机常用操作,打电话,短信..,适配性测试,原来我们的公司就买了华为mate8 ...

  7. 洛谷 P5046 [Ynoi2019 模拟赛] Yuno loves sqrt technology I(分块+卡常)

    洛谷题面传送门 zszz,lxl 出的 DS 都是卡常题( 首先由于此题强制在线,因此考虑分块,我们那么待查询区间 \([l,r]\) 可以很自然地被分为三个部分: 左散块 中间的整块 右散块 那么这 ...

  8. Atcoder Regular Contest 096 D - Sweet Alchemy(贪心+多重背包)

    洛谷题面传送门 & Atcoder 题面传送门 由于再过 1h 就是 NOI 笔试了所以题解写得会略有点简略. 考虑差分,记 \(b_i=c_i-c_{fa_i}\),那么根据题意有 \(b_ ...

  9. Atcoder Grand Contest 032 E - Modulo Pairing(乱搞+二分)

    Atcoder 题面传送门 & 洛谷题面传送门 神仙调整+乱搞题. 首先某些人(including me)一看到最大值最小就二分答案,事实上二分答案对这题正解没有任何启发. 首先将 \(a_i ...

  10. DirectX12 3D 游戏开发与实战第六章内容

    利用Direct3D绘制几何体 学习目标 探索用于定义.存储和绘制几何体数据的Direct接口和方法 学习编写简单的顶点着色器和像素着色器 了解如何用渲染流水线状态对象来配置渲染流水线 理解怎样创建常 ...