JS数据结构-Set集合,创建Set,常用Set方法_js set-程序员宅基地

技术标签: 前端  js  javascript  

Set
  ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。
  很多时候我们把Set叫做 集合,但是,Set可以是集合,集合不一定是Set。
  特性:唯一性=>不重复=>能够对数据进行去重操作。
  
注:集合去重,是全等匹配,===。

创建Set
  Set 本身是一个构造函数,调用构造函数用来生成 Set 数据结构。
  关键词 标识符 = new Set();
  例 let i = new Set();
  
  Set 函数可以接受一个数组(或类似数组的对象)作为参数,用来进行数据初始化。
  let i = new Set([1, 2, 3, 4, 4]);  会得到  set{1, 2, 3, 4,}

注:如果初始化时给的值有重复的,会自动去除。集合并没有字面量声明方式。

Set的属性

常用的属性就一个:size   返回 Set 实例的成员总数。
  let s = new Set([1, 2, 3]);
  console.log( s.size ); // 3
  
Set的方法

Set 实例的方法分为两大类:操作方法(用于数据操作)和遍历方法(用于遍历数据)。

操作方法:
add(value)    添加数据,并返回新的 Set 结构
delete(value)   删除数据,返回一个布尔值,表示是否删除成功
has(value)    查看是否存在某个数据,返回一个布尔值
clear()      清除所有数据,没有返回值

let set = new Set([1, 2, 3, 4, 4]);
// 添加数据 5
let addSet = set.add(5);
console.log(addSet); // Set(5) {1, 2, 3, 4, 5}
// 删除数据 4s
let delSet = set.delete(4);
console.log(delSet); // true
// 查看是否存在数据 4
let hasSet = set.has(4);
console.log(hasSet); // false
// 清除所有数据
set.clear();
console.log(set); // Set(0) {}

遍历方法:

Set 提供了三个遍历器生成函数和一个遍历方法。
keys()     返回一个键名的遍历器
values()    返回一个键值的遍历器
entries()    返回一个键值对的遍历器
forEach()   使用回调函数遍历每个成员

let color = new Set(["red", "green", "blue"]);
for(let item of color.keys()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.values()){
 console.log(item);
}
// red
// green
// blue
for(let item of color.entries()){
 console.log(item);
}
// ["red", "red"]
// ["green", "green"]
// ["blue", "blue"]
color.forEach((item) => {
 console.log(item)
})
// red
// green
// blue

与数组相关操作

Set 转数组:
由于扩展运算符…,内部的原理也是使用的 for-of 循环,所以也可以用于操作 Set 结构。
例如将 Set 结构转换为数组结构:

let color = new Set(["red", "green", "blue"]);
let colorArr = [...color];

数组去重:
扩展运算符和 Set 结构相结合,就可以去除数组的重复成员。

let arr = [1,2,2,2,2,"2",24,5,6];
//step1:数组转集合
let set = new Set(arr);//已经去掉重复值,当前不是数组,而集合  Set { 1, 2, '2', 24, 5, 6 }
//step2:集合转数组
arr = [...set];//[ 1, 2, '2', 24, 5, 6 ]

扩展

let num1 = new Set([1, 2, 3, 4]);
let num2 = new Set([3, 4, 5, 6]);

//并集
let union = new Set([...num1,...num2]);
console.log(union);//Set { 1, 2, 3, 4, 5, 6 }

//交集
let intersect = new Set(
    [...num1].filter(x=> num2.has(x))
)
console.log(intersect); //Set { 3, 4 }

//差集
let difference = new Set(
    [...num1].filter(x => !num2.has(x))
)
console.log(difference); //Set { 1, 2 }

原文链接:https://www.cnblogs.com/jiayouba/p/11946517.html

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/mingjuna2010/article/details/106940497

智能推荐

联想计算机管理员权限设置,Windows XP系统如何新建administrator管理员权限账户-程序员宅基地

文章浏览阅读1.6k次。知识点分析:对于Windows XP系统,有很多种创建用户账户的操作方法。其中包括:使用CMD命令行的net命令进行,也可以使用控制面板的图形界面进行,还可以使用计算机管理控制台中的“本地用户和组”进行。其中后者自定义功能多,本文以此为例进行操作示范。操作步骤:1. 在系统桌面找到并使用鼠标右键点击“我的电脑”图标,然后在弹出菜单中选择“管理(G)”,如下图所示:2. 在弹出的计算机管理窗口,展开..._xp 开启管理员账户

socket 及 websocket的握手过程_websocket三次握手详解-程序员宅基地

文章浏览阅读6k次。一、WebSocket和HTTP之间的关系WebSocket和HTTP一样都是基于TCP的应用层协议。WebSocket协议和HTTP协议是两种不同的东西。客户端开始建立WebSocket连接时要发送一个header标记了 Upgrade的HTTP请求,表示请求协议升级。所以服务器端做出响应的简便方法是,直接在现有的HTTP服务器软件和现有的端口上实现WebSocket协议,然后再回一个状态..._websocket三次握手详解

小学计算机反思案例,小学数学有效教学案例及反思-程序员宅基地

文章浏览阅读210次。小学数学有效教学案例及反思《植树问题》教学设计及反思一、教学目标:1、知识与技能目标:通过动手实践,合作探究,让学生在做数学的过程中经历由现实问题到数学建模,理解并掌握植树棵数与间隔数之间的关系。2、过程与方法目标:通过学生自主实小学数学教学案例及反思小学数学教学案例及反思学生的认知结构,只有在经历学习活动的过程中主动才能完成。只有学生本人的积极思考、主动探索,才能有所发现、有所创新。但在不少学校..._小学数学教学案例博客

HBuilder的下载与使用(详细步骤)_hbuilder官网-程序员宅基地

文章浏览阅读10w+次,点赞125次,收藏651次。一、HBuilder IDE的下载HBuilder下载官网地址:在地址栏中直接输入https://www.dcloud.io或者直接点击下面的链接DCloud - HBuilder、HBuilderX、uni-app、uniapp、5+、5plus、mui、wap2app、流应用、HTML5、小程序开发、跨平台App、多端框架进入官网,免费下载最新版的HBuilder。HBuilder目前有两个版本,一个是windows版,一个是mac版。下载的时候根据自己的电脑选择适合自己的版本。_hbuilder官网

centos7删除文件夹命令_CentOS7文件(文件夹)复制、移动与删除命令介绍-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏10次。在使用Centos7系统时,一般都需要管理大量的文件(文件夹),这样就要需要用到一些文件管理命令。本文以第一、文件(文件夹)复制命令命令格式:cp [-adfilprsu] 源文件(source) 目标文件(destination)cp [option] source1 source2 source3 … directory-adfilprsu参数说明:-a:是指archive的意思,也说是指复制..._centos7删除文件夹

上下跳动的箭头 css_h5 箭头抖动-程序员宅基地

文章浏览阅读2.9k次。在H5场景动画时,常常会用到着一样一个效果,箭头持续上下跳动来引导用户上下滑动整个页面<!DOCTYPE html ><html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <tit_h5 箭头抖动

随便推点

PHP加密解密函数authcode-程序员宅基地

文章浏览阅读46次。核心提示:康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。康盛的 authcode 函数可以说对中国的PHP界作出了重大贡献。包括康盛自己的产品,以及大部分中国使用PHP的公司都用这个函数进行加密,authcode 是使用异或运算进行加密和解密。..._php config('auth_code')

c#利用word控件将pdf转为word_c# pdf转word-程序员宅基地

文章浏览阅读466次,点赞10次,收藏8次。c#利用word控件将pdf转为word文档_c# pdf转word

国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结_国产化服务器 存在问题-程序员宅基地

文章浏览阅读3.1w次,点赞135次,收藏145次。国产化系统中遇到的视频花屏、卡顿以及延迟问题的记录与总结。_国产化服务器 存在问题

听说,年终总结写不好,绩效要被打 C-程序员宅基地

文章浏览阅读409次。点击蓝色“有关SQL”关注我哟加个“星标”,天天与10000人一起快乐成长我曾问过身边的年轻朋友们,你们平时写日记吗?猜猜这些工作2,3年的程序员们,怎么回答。答案自然是五花八门,其中最令..._年度总结写不好会怎样

[Shell]CVE-2017-8464漏洞复现-程序员宅基地

文章浏览阅读300次。0x01 漏洞原理Windows系统通过解析 .LNK 后缀文件时,是使用二进制来解析的,而当恶意的二进制代码被系统识别执行的时候就可以实现远程代码执行,由于是在explorer.exe进程中运行的,所以load进内存的时候与当前用户具有相同的权限。于是攻击者利用这一解析过程的漏洞,将包含恶意二进制的代码被附带进可移动驱动器(或远程共享过程中),受害者使用powershell解析 ...._能够使用xshell完成cve复现的近两年的cve有哪些

java文本框双击可编辑_java swing 文本域双击变为可编辑-程序员宅基地

文章浏览阅读132次。java swing如何实现文本域双击变为可编辑呢?给文本域添加鼠标事件监听程序即可:resultTA1=new AssistPopupTextArea();resultTA1.setEditable(false);resultTA1.setLineWrap(true);resultTA1.setWrapStyleWord(true);resultTA1.addMouseListener(new ..._web文本框 双击编辑