<!DOCTYPE html>
<html>
<head>
<title>集合</title>
<meta charset="utf-8">
<script type="text/javascript">
function Set(){ let items = {}; // add:添加一个新的项
this.add = function(value){
if(!this.has(value)){
// 添加一个值的时候,把它同时作为键和值保存,有利于查找这个值
items[value] = value;
return true;
}
return false;
}; // delete:删除值
this.delete = function(value){
if(this.has(value)){
delete items[value];
return true;
}
return false;
}; // has:如果值在集合中返回true,否则返回false
this.has = function(value){
return items.hasOwnProperty(value);
}; // clear:移除集合中的所有项
this.clear = function(){
items = {};
}; // size:返回集合中所包含的元素数量,与数组的length属性类似
this.size = function(){
return Object.keys(items).length;
}; // sizeLegacy:跨浏览器兼容返回集合元素数量
this.sizeLegacy = function(){
let count = 0;
for(let key in items){
if(items.hasOwnPrototype(key)){
++count;
}
}
return count;
}; // values:返回一个包含集合中所有数据的数组
this.values = function(){
let values = [];
for(let i=0, keys = Object.keys(items); i<keys.length; i++){
values.push(items[keys[i]]);
}
return values;
}; // valuesLegacy:跨浏览器兼容
this.valuesLegacy = function(){
let values = [];
for(let key in items){
if(items.hasOwnPrototype(key)){
values.push(items[key]);
}
}
return values;
}; // getItems
this.getItems = function(){
return items;
}; // union:并集
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;
}; // intersection:交集
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;
}; //difference:差集
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;
}; // subset:子集
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 false;
}
}
}
return true;
} } // Set的使用
var set1 = new Set();
set1.add(1);
set1.add(2);
set1.add(3); var set2 = new Set();
set2.add(1);
set2.add(2);
set2.add(3);
set2.add(4);
set2.add(5); var set3 = new Set();
set3.add("a");
set3.add("b");
set3.add("c");
set3.add("d"); // 打印集合大小
console.log(set1.size()); //3
console.log(set2.size()); //5
console.log(set3.size()); //4 //打印集合元素的数组形式
console.log(set1.values()); //[1,2,3]
console.log(set2.values()); //[1,2,3,4,5]
console.log(set3.values()); //["a", "b", "c", "d"] // 求set1和set2的并集
let set12 = set1.union(set2);
console.log(set12.values()); //[1,2,3,4,5] // 求set1和set2的交集
let _set12 = set1.intersection(set2);
console.log(_set12.values()); //[1,2,3] // 求set1和set2的差集
let set2_1 = set2.difference(set1);
console.log(set2_1.values()); //[4,5] // 判断set1是否为set2的子集
console.log(set1.subset(set2)); //true // 判断set3是否为set2的子集
console.log(set3.subset(set2)); //false
</script>
</head>
<body> </body>
</html>

  

【javascript】数据结构-集合的更多相关文章

  1. JavaScript数据结构——集合、字典和散列表

    集合.字典和散列表都可以存储不重复的值. 在集合中,我们感兴趣的是每个值本身,并把它当作主要元素.在字典和散列表中,我们用 [键,值] 的形式来存储数据. 集合(Set 类):[值,值]对,是一组由无 ...

  2. JavaScript数据结构——集合的实现与应用

    与数学中的集合概念类似,集合由一组无序的元素组成,且集合中的每个元素都是唯一存在的.可以回顾一下中学数学中集合的概念,我们这里所要定义的集合也具有空集(即集合的内容为空).交集.并集.差集.子集的特性 ...

  3. 学习javascript数据结构(三)——集合

    前言 总括: 本文讲解了数据结构中的[集合]概念,并使用javascript实现了集合. 原文博客地址:学习javascript数据结构(三)--集合 知乎专栏&&简书专题:前端进击者 ...

  4. 为什么我要放弃javaScript数据结构与算法(第六章)—— 集合

    前面已经学习了数组(列表).栈.队列和链表等顺序数据结构.这一章,我们要学习集合,这是一种不允许值重复的顺序数据结构. 本章可以学习到,如何添加和移除值,如何搜索值是否存在,也可以学习如何进行并集.交 ...

  5. JavaScript数据结构与算法-集合练习

    集合的实现 function Set () { this.dataStore = []; this.add = add; this.remove = remove; this.size = size; ...

  6. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  7. 学习javascript数据结构(一)——栈和队列

    前言 只要你不计较得失,人生还有什么不能想法子克服的. 原文地址:学习javascript数据结构(一)--栈和队列 博主博客地址:Damonare的个人博客 几乎所有的编程语言都原生支持数组类型,因 ...

  8. JavaScript数据结构——链表

    链表:存储有序的元素集合,但不同于数组,链表中的元素在内存中不是连续放置的.每个元素由一个存储元素本身的节点和一个指向下一个元素的引用(也称指针或链接)组成. 好处:可以添加或移除任意项,它会按需扩容 ...

  9. JavaScript数据结构——栈和队列

    栈:后进先出(LIFO)的有序集合 队列:先进先出(FIFO)的有序集合 --------------------------------------------------------------- ...

  10. 学习javascript数据结构(四)——树

    前言 总括: 本文讲解了数据结构中的[树]的概念,尽可能通俗易懂的解释树这种数据结构的概念,使用javascript实现了树,如有纰漏,欢迎批评指正. 原文博客地址:学习javascript数据结构( ...

随机推荐

  1. [置顶] Linux协议栈代码阅读笔记(二)网络接口的配置

    Linux协议栈代码阅读笔记(二)网络接口的配置 (基于linux-2.6.11) (一)用户态通过C库函数ioctl进行网络接口的配置 例如,知名的ifconfig程序,就是通过C库函数sys_io ...

  2. sencha touch 扩展篇之将sencha touch打包成安装程序(下)- 使用phonegap打包安装程序

        这讲我们来讲解下如何使用phonegapa创建项目环境并通过她们将sencha touch打包成app,这里我们只讲解打包android的apk,打包ios的过程有点类似,但是需要在mac环境 ...

  3. 基于TINY4412的Andorid开发-------简单的LED灯控制

    参考资料: <Andriod系统源代码情景分析> <嵌入式Linux系统开发完全手册_基于4412_上册> 作者:彭东林 邮箱:pengdonglin137@163.com 平 ...

  4. Python - 3.6 学习四

    错误.调试和测试 程序运行中,可能会遇到BUG.用户输入异常数据以及其它环境的异常,这些都需要程序猿进行处理.Python提供了一套内置的异常处理机制,供程序猿使用,同时PDB提供了调试代码的功能,除 ...

  5. Swift - 把汉字转换为拼音,并且截取首字母做索引用

    var transformContents = CFStringCreateMutableCopy(nil, 0, "咋啊的看到回复阿斯顿发货发哦iasdifas") CFStri ...

  6. create sequence

    create sequence seq_test start with 3 increment by 1 minvalue 1  --范围-(1027 -1) maxvalue 99999999999 ...

  7. 字符串处理(String)

    字符串类型(String类)需要注意的几个函数: 1.字符串的连接.一般而言,Java不允许运算符直接应用到String对象,唯一的例外是"+"运算符,它用来连接两个字符串,产生一 ...

  8. lunux系统安全

    1.清除不必要的系统帐户 [root@deep]# userdel adm [root@deep]# userdel lp [root@deep]# userdel sync [root@deep]# ...

  9. DetaSet更新数据

    用到的控件:DataGridView(展示数据),                    Button控件,更名[更新] using System; using System.Collections. ...

  10. webrtc--stun-turn

    .WebRTC后台服务: 通话的房间服务器(Room Server) 房间服务器是用来创建和管理通话会话的状态维护,是双方通话还是多方通话,加入与离开房间等等,我们暂时沿用Google部署在GAE平台 ...