记录Javascript集合操作
   function Set() {
         var items = {};
         /**
          * 添加元素
          * @param {[type]} value [description]
          */
         this.add = function(value) {
             if (!this.has(value)) {
                 items[value] = value;
                 return true;
             }
             return false;
         };
         /**
          * 删除元素
          * @param  {[type]} value [description]
          * @return {[type]}       [description]
          */
         this.remove = function(value) {
             if (this.has(value)) {
                 delete items[value];
                 return true;
             }
             return false;
         };
         /**
          * 判断元素是否存在集合里
          * @param  {[type]}  value [description]
          * @return {Boolean}       [description]
          */
         this.has = function(value) {
             return items.hasOwnProperty(value);
         };
         /**
          * 清空集合
          * @return {[type]} [description]
          */
         this.clear = function() {
             items = {};
         };
         /**
          * 获取集合的长度
          * @return {[type]} [description]
          */
         this.size = function() {
             return Object.keys(items).length;
         };
         /**
          * 获取集合的长度(兼容IE8)
          * @return {[type]} [description]
          */
         this.sizeLegacy = function() {
             var count = 0;
             for (var prop in items) {
                 if (items.hasOwnProperty(prop))
                     ++count;
             }
             return count;
         };
         /**
          * 获取集合
          * @return {[type]} [description]
          */
         this.values = function() {
             return Object.keys(items);
         };
         /**
          * 获取集合(兼容IE8)
          * @return {[type]} [description]
          */
         this.valuesLegacy = function() {
             var keys = [];
             for (var key in items) {
                 keys.push(key);
             }
             return keys;
         };
         /**
          * 并集
          * @param  {[type]} otherSet [description]
          * @return {[type]}          [description]
          */
         this.union = function(otherSet) {
             var unionSet = new Set();
             var values = this.valuesLegacy();
             for (var i = 0; i < values.length; i++) {
                 unionSet.add(values[i]);
             }
             values = otherSet.valuesLegacy();
             for (var i = 0; i < values.length; i++) {
                 unionSet.add(values[i]);
             }
             return unionSet;
         };
         /**
          * 交集
          * @param  {[type]} otherSet [description]
          * @return {[type]}          [description]
          */
         this.intersection = function(otherSet) {
             var intersectionSet = new Set();
             var values = this.valuesLegacy();
             for (var i = 0; i < values.length; i++) {
                 if (otherSet.has(values[i])) {
                     intersectionSet.add(values[i]);
                 }
             }
             return intersectionSet;
         };
         /**
          * 差集
          * @param  {[type]} otherSet [description]
          * @return {[type]}          [description]
          */
         this.difference = function(otherSet) {
             var differenceSet = new Set();
             var values = this.valuesLegacy();
             for (var i = 0; i < values.length; i++) {
                 if (!otherSet.has(values[i]))
                     differenceSet.add(values[i]);
             }
             return differenceSet;
         };
         /**
          * 子集
          * @param  {[type]} otherSet [description]
          * @return {[type]}          [description]
          */
         this.subset = function(otherSet) {
             if (this.sizeLegacy() > otherSet.sizeLegacy()) {
                 return false;
             } else {
                 var values = this.valuesLegacy();
                 for (var i = 0; i < values.length; i++) {
                     if (!otherSet.has(values[i])) {
                         return false;
                     }
                 }
                 return true;
             }
         }
     }
     var set = new Set();
     set.add(1);
     set.add(2);
     set.add(3);
     var set1 = new Set();
     set1.add(3);
     set1.add(4);
     set1.add(5);
     var set2 = new Set();
     set2.add(3);
     var unionSet = set.union(set1);
     console.log(unionSet.valuesLegacy());
     var intersectionSet = set.intersection(set1);
     console.log(intersectionSet.valuesLegacy());
     var differenceSet = set.difference(set1);
     console.log(differenceSet.valuesLegacy());
     console.log(set.subset(set1));
     console.log(set2.subset(set));
记录Javascript集合操作的更多相关文章
- javascript集合求交集
		两集合求交集 思路: 1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存.该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度. 2. 因为A B 都排过序,所以 ... 
- javascript集合的交,并,补,子集,长度,新增,删除,清空等操作
		<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ... 
- JavaScript常见集合操作
		JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ... 
- javascript DOM 操作
		在javascript中,经常会需要操作DOM操作,在此记录一下学习到DOM操作的知识. 一.JavaScript DOM 操作 1.1.DOM概念 DOM :Document Object Mode ... 
- JAVASE02-Unit05: 集合操作 —— 查找表
		Unit05: 集合操作 -- 查找表 使用该类测试自定义元素的集合排序 package day05; /** * 使用该类测试自定义元素的集合排序 * @author adminitartor * ... 
- JavaScript 节点操作Dom属性和方法(转)
		JavaScript 节点操作Dom属性和方法 一些常用的dom属性和方法,列出来作为手册用. 属性: 1.Attributes 存储节点的属性列表(只读) 2.childNodes 存储 ... 
- Javascript 文件操作(整理版)
		Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ... 
- 集合操作出现的ConcurrentModificationException(源码分析)
		摘要: 为了保证线程安全,在迭代器迭代的过程中,线程是不能对集合本身进行操作(修改,删除,增加)的,否则会抛出ConcurrentModificationException的异常. 示例: publi ... 
- Oracle集合操作
		在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:将多个查询的结果组合到一个查询结果之中,并去掉反复值 UNION ALL:将多个查 ... 
随机推荐
- hbase coprocessor 二级索引
			Coprocessor方式二级索引 1. Coprocessor提供了一种机制可以让开发者直接在RegionServer上运行自定义代码来管理数据.通常我们使用get或者scan来从Hbase中获取数 ... 
- IIS web搭建之虚拟主机
			IIS web搭建之虚拟主机 虚拟目录:能将一个网站的文件分散存储在同一个计算机的不同目录和其他计算机. 使用虚拟目录的好处: 1.将数据分散保存到不同的磁盘或者计算机上,便于分别开发和维护. 2.当 ... 
- kafka监控项目大全
			https://github.com/claudemamo/kafka-web-console http://github.com/pinterest/doctorkafka http://g ... 
- Storm入门(六)深入理解可靠性机制
			转自http://blog.csdn.net/zhangzhebjut/article/details/38467145 一 可靠性简介 Storm的可靠性是指Storm会告知用户每一个消息单元是否在 ... 
- 基于Kubernetes 构建.NET Core 的技术体系
			很多公司技术支持岗位的工作,如配置域名,部署环境,修改复位配置,服务重启,扩容缩容,梳理和完善监控,根据开发的需要查找日志等工作,需要和开发进行大量的沟通,如什么是外网域名,什么是内网域名.A nam ... 
- git的学习笔记(二):git远程操作
			1.创建ssh key ssh-keygen -t rsa -C "your_email@example.com" 执行命令后会在用户的家目录生成.ssh的隐藏文件夹,文件夹里有公 ... 
- 使用ASP.NET Core支持GraphQL -- 较为原始的方法
			GraphQL简介 下面是GraphQL的定义: GraphQL 既是一种用于 API 的查询语言也是一个满足你数据查询的运行时. GraphQL 对你的 API 中的数据提供了一套易于理解的完整描述 ... 
- 特征提取方法: one-hot 和 TF-IDF
			one-hot 和 TF-IDF是目前最为常见的用于提取文本特征的方法,本文主要介绍两种方法的思想以及优缺点. 1. one-hot 1.1 one-hot编码 什么是one-hot编码?one-ho ... 
- python接口自动化(四)--接口测试工具介绍(详解)
			简介 “工欲善其事必先利其器”,通过前边几篇文章的介绍,大家大致对接口有了进一步的认识.那么接下来让我们看看接口测试的工具有哪些. 目前,市场上有很多支持接口测试的工具.利用工具进行接口测试,能够提供 ... 
- LVS (一) 原理
			LVS原理概述 负载均衡就是,在多个提供相同服务主机的前段,增加一个分发器,根据用户请求,然后根据某种方式或者策略,将用户请求分发到提供服务的主机上.同时负载均衡应用还应该提供对后其后端服务健康检查的 ... 
