JavaScript数据结构与算法——集合

1.集合数据结构

集合是一组无序且唯一(不能重复)的项组成的。这个数据结构使用了和有限集合相同的数学概念。

2.创建集合

function Set() {// 这里使用对象而不是数组来表示集合 // js对象中不允许一个键值指向两个不同属性,也保证了集合中的元素都是唯一的let items = {};//1.首先实现has(value)方法this.has = function(value) {return value in items;//return items.hasOwnProperty(value);}//2.向集合添加一个项this.add = function(value) {if (!this.has(value)) {items[value] = value;return true;} else{return false;}}//3.移除某一项和清空集合this.remove = function(value) {if (this.has(value)) {delete items[value];return true;} else{return false;}}this.clear = function() {items = {};}//4.返回集合长度this.size = function() {return Object.keys(items).length;}// 兼容性更好this.sizeLegacy = function() {let count = 0;for(let key in items) {if(items.hasOwnProperty(key)) ++count;}return count;}//5.返回一个包含集合中所有值的数组this.values = function() {let values = [];for (let i = 0, keys=Object.keys[items]; i < keys.length; i++) {values.push(items[keys[i]])};return values;}// 兼容性更好this.valuesLegacy = function() {let values = [];for (let key in items) {if(items.hasOwnProperty(key)) {values.push(items[keys)}};return values;}
}

集合的使用

let set = new Set();set.add(1);
console.log(set.values()); // ['1']
console.log(set.has(1)); // true
console.log(set.size()); // 1
set.add(2);
console.log(set.values()); // ['1', '2']
console.log(set.has(2)); // true
console.log(set.size()); // 2
set.remove(1);
console.log(set.values()); // ['2']
console.log(set.has(1)); // false
console.log(set.size()); // 1

3.集合的操作

集合有:并集、交集、差集、子集

// 1.实现并集
this.union = function(otherSet) {let unionSet = new Set();let values = this.values();for(let i=0; i<values.length; i++ ){unionSet.add(values[i])}values = otherSet.values();for(let i=0; i<values.length; i++ ){unionSet.add(values[i])}return unionSet;
}
// 2.实现交集
this.intersection = function(otherSet){let intersectionSet = new Set();let values = this.values();for(let i=0; i<values.length; i++ ){if(otherSet.has(values[i])) {intersectionSet.add(values[i])}}return intersectionSet;
}
// 3.实现差集
this.difference = function(otherSet) {let differenceSet = new Set();let values = this.values();for(let i=0; i<values.length; i++ ){if(!otherSet.has(values[i])) {differenceSet.add(values[i])}}return differenceSet;
}
// 4.子集
this.subset = function(otherSet) {if(this.size() > otherSet.size()) {return false;} else {let values = this.values();for(let i=0; i<values.length; i++ ){if(!otherSet.has(values[i])) {return true}}return true;}
}

在es6中新增了set类,我们也可以使用其中自带的方法。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/280312.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

facebook 邀请好友_如何查看紧急情况下您的Facebook朋友是否安全

facebook 邀请好友Facebook’s Safety Check feature lets you check in during an emergency to confirm you’re safe. If you have friends or family in an area that you haven’t heard from, though, you may want to ask them directly. Here’s how to ask someone to…

【您有一封来自阿里云的邀请函】阿里云成都客户服务中心20+职位虚席以待,来吧,成就最好的自己!...

如果你不想辜负这个科技的时代&#xff0c;相信它会因你而不同。如果你不想仅做年度大戏的观众&#xff0c;相信自己会成为主角。如果你不想淹没在枯燥与苟且中&#xff0c;相信工作有诗和远方。那么&#xff0c;不要犹豫&#xff0c;加入我们&#xff01;在这&#xff0c;你已…

.NET 代码优化 聊聊逻辑圈复杂度

本文属于 dotnet 代码优化系列博客。相信大家都对圈复杂度这个概念很是熟悉&#xff0c;本文来和大家聊聊逻辑的圈复杂度。代码优化里面&#xff0c;一个关注的重点在于代码的逻辑复杂度。一段代码的逻辑复杂度越高&#xff0c;那么维护起来的难度也就越大。衡量代码的逻辑复杂…

GO语言基础条件、跳转、Array和Slice

1. 判断语句if 1. 条件表达式没有括号&#xff08;这点其他语言转过来的需要注意&#xff09; 2. 支持一个初始化表达式&#xff08;可以是并行方式&#xff0c;即&#xff1a;a, b, c : 1, 2, 3) 3. 左大括号必须和条件语句或 else 在同一行 4. 支持单行模式 5. 初始化语句中的…

干式真空泵原理_如何安装干式墙锚在墙壁上悬挂重物

干式真空泵原理If you ever plan to mount something to the wall that’s even remotely heavy, you’ll need to use drywall anchors if a stud isn’t available. Here are the different types of drywall anchors, and how to use each one. 如果您打算将甚至更重的东西安…

sharding-jdbc学习

sharding-jdbc的全局id生成策略是通过雪花算法来实现的。 sharding-jdbc也是一个数据的中间件&#xff0c;可实现读写分离和分库分表&#xff0c;比mycat要简单些。 nginx与ribbon实现负载均衡的区别&#xff1a;nginx是实现服务器端的负载均衡&#xff0c;ribbon是实现客户端即…

像go 一样 打造.NET 单文件应用程序的编译器项目bflat 发布 7.0版本

现代.NET和C#在低级/系统程序以及与C/C/Rust等互操作方面的能力完全令各位刮目相看了&#xff0c;有人用C#开发的64位操作系统: GitHub - nifanfa/MOOS: C# x64 operating system pro...&#xff0c;截图要介绍的是一个结合Roslyn和NativeAOT的实验性编译器bflat &#xff1a;h…

添加dubbo.xsd的方法

整合dubbo-spring的时候&#xff0c;配置文件会报错 因为 阿里关闭在线的域名了.需要本地下载xsd文件 所以&#xff0c;需要下载本地引入。 解决方式&#xff1a; 在dubbo的开源项目上找到xsd文件&#xff1a; https://github.com/alibaba/dubbo Idea使用本地xsd Setting…

Spring Cloud Feign注意点

2019独角兽企业重金招聘Python工程师标准>>> 1、只要在启动类中加入EnableFeignClients注解&#xff0c;才会扫描FeignClient注解 2、Feign主要是通过接口调用&#xff0c;底层其实也是HttpClient/OkHttp 1&#xff09;提供一个Feign接口&#xff0c;加入对应的rest…

word 替换 增加引号_如何在Word 2013文档中替换部分(不是全部)智能引号

word 替换 增加引号Word includes a setting that allows you to automatically convert straight quotes to smart quotes, or specially curved quotes, as you type. However, there may be times you need straight quotes and you may have to convert some of the quotes…

i-i.me:网址导航真的是伪需求吗?

每一个程序员都有一个框架梦&#xff0c;每一个站长曾经都有一个网址导航梦。本人从07年开始接触互联网&#xff0c;成为一名中国草根站长&#xff0c;到现在终于熬成半个程序员。10年时间&#xff0c;没有赚到钱&#xff0c;也没有练就一身过硬的技术&#xff08;所以叫半个程…

.Net AOT--Win11搭建和编译 X64 汇编

楔子&#xff1a;windows11上编译x64汇编&#xff0c;很多人不太了解。甚至搞出DOSBox这种几亿年前的老古董&#xff0c;还有的专门搞些Linux下面的工具来搞到Windows上运行。其实这些大可不必&#xff0c;也没这么麻烦。微软技术出身&#xff0c;基本上工具链齐全。本篇来看下…

安装mongoDB遇见的一个路径问题

如果安装路径不存在&#xff0c;则不会解压EXE软件&#xff01; 安装monogoDB后&#xff0c;它不会自动添加执行路径&#xff01; 意思就是安装路径是D盘下面的mongoDB文件夹&#xff0c;假如不存在这个文件夹&#xff0c;则不会安装成功 你需要添加路径&#xff1a; 你可以利用…

【Filecoin源码仓库全解析】第一章:搭建Filecoin测试节点

2019.2.14 情人节&#xff0c;Filecoin项目开放了核心源码仓库go-filecoin&#xff0c;并更新了 filecoin-project organization下的诸多核心成果&#xff0c;这意味着&#xff0c;Filecoin已然度过了最困难的难点攻关期&#xff0c;进入到了全民公测阶段。 本系列文章将协助大…

DNS 代理?Pipy:这我也可以

Pipy 是个可编程代理&#xff0c;曾经我们做过 TCP/HTTP 代理、MQTT 代理、Dubbo 代理、Redis 代理、Thrift 代理。前几天有人问 DNS[1] 的代理能不能做&#xff1f;当然可以&#xff0c;而且 DNS 代理已经应用在 跨集群流量调度 中&#xff0c;文末经对此进行简单地介绍。阅读…

如何在Windows中快速轻松地将文件发送到SkyDrive

We have already shown you how you can share external folders with your SkyDrive, but what if you actually want to copy a file or folder into your SkyDrive folder? Of course copying and pasting is nowhere near geeky enough, so here’s how to add a SkyDrive…

windows删除桌面ie_从Windows 8“开始”屏幕启动IE的桌面版本

windows删除桌面ieThere are two versions of Internet Explorer in Windows 8, one you can only launch from the Start Screen and the Desktop version which you can only launch from the Desktop. Lets look at how we can launch the Desktop version from the Start S…

.NET Conf China 2022 圆满落幕,明年再见!

时光飞快&#xff0c;还记得本月的第一个周末吗&#xff1f;12月3日-12月4日&#xff0c;相信对于 .NET 开发者来说一定记忆犹新&#xff01;.NET Conf China 2022 于12月4日圆满落幕。八方助力共谱大会盛宴.NET Conf China 2022 是一个社区性质的技术峰会&#xff0c;本次大会…

马哥linux高薪中级-DNS

第一章 简介一、DNSdomain name server&#xff0c;用来将计算机名称或者域名解析成ip地址的服务协议。用户在使用域名访问时会先通过DNS服务请求域名对应的ip地址&#xff0c;然后缓存下来&#xff0c;然后才通过ip地址进行通信。最初域名解析是通过HOSTS文件来静态绑定的。DN…

愚蠢的怪胎技巧:通过命令行管理SkyDrive

Originally launched as an April Fools prank by the Microsoft SkyDrive team, SkyCMD turned out to be a really geeky way to manage files and folders on your SkyDrive from the command line. Lets take a quick look. SkyCMD最初是由Microsoft SkyDrive团队以愚人节恶…