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集合操作的更多相关文章

  1. javascript集合求交集

    两集合求交集 思路: 1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存.该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度. 2. 因为A B 都排过序,所以 ...

  2. javascript集合的交,并,补,子集,长度,新增,删除,清空等操作

    <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...

  3. JavaScript常见集合操作

    JavaScript常见集合操作 集合的遍历 FOR循环(效率最高) 优点:JavaScript最普遍的for循环,执行效率最高 缺点:无法遍历对象 for(let i=0;i<array.le ...

  4. javascript DOM 操作

    在javascript中,经常会需要操作DOM操作,在此记录一下学习到DOM操作的知识. 一.JavaScript DOM 操作 1.1.DOM概念 DOM :Document Object Mode ...

  5. JAVASE02-Unit05: 集合操作 —— 查找表

    Unit05: 集合操作 -- 查找表 使用该类测试自定义元素的集合排序 package day05; /** * 使用该类测试自定义元素的集合排序 * @author adminitartor * ...

  6. JavaScript 节点操作Dom属性和方法(转)

    JavaScript 节点操作Dom属性和方法   一些常用的dom属性和方法,列出来作为手册用. 属性:   1.Attributes 存储节点的属性列表(只读)   2.childNodes 存储 ...

  7. Javascript 文件操作(整理版)

    Javascript 文件操作 一.功能实现核心:FileSystemObject 对象 其实,要在Javascript中实现文件操作功能,主要就是依靠FileSystemobject对象.在详细介绍 ...

  8. 集合操作出现的ConcurrentModificationException(源码分析)

    摘要: 为了保证线程安全,在迭代器迭代的过程中,线程是不能对集合本身进行操作(修改,删除,增加)的,否则会抛出ConcurrentModificationException的异常. 示例: publi ...

  9. Oracle集合操作

    在Oracle中提供了三种类型的集合操作: 并(UNION).交(INTERSECT).差(MINUS) UNION:将多个查询的结果组合到一个查询结果之中,并去掉反复值 UNION ALL:将多个查 ...

随机推荐

  1. Git 学习总结

    概况 CVS 及 SVN 都是集中式的版本控制系统,而 Git 是分布式版本控制系统. 集中式版本控制系统最大的毛病就是必须联网才能工作: 分布式版本控制系统根本没有“中央服务器”,每个人的电脑上都是 ...

  2. 【机器学习笔记五】聚类 - k均值聚类

    参考资料: [1]Spark Mlib 机器学习实践 [2]机器学习 [3]深入浅出K-means算法  http://www.csdn.net/article/2012-07-03/2807073- ...

  3. 在.NET MVC 中使用Highcharts+Ajax+Json生成动态曲线图,柱状图,饼图

    开发背景: 今天在做一个关于商城后台金额报表统计的功能,为了让数据直观明了并且这个报表还需要在手机端自适应所以我决定采用HIghCharts插件下的的报表,大家也可以去了解一下免费开源主要是好看. 首 ...

  4. SUSE12SP3-Mycat(3)Server.xml配置详解

    简介 server.xml 几乎保存了所有 mycat 需要的系统配置信息.其在代码内直接的映射类为 SystemConfig 类. user 标签 <user name="test& ...

  5. PMBook - 6.项目进度管理

      6.3 排列活动顺序 6.3.1 排列活动顺序:输入 6.3.1.1 项目管理计划 6.3.1.2 项目文件 6.3.1.3 事业环境因素 6.3.1.4 组织过程资产 6.3.2 排列活动顺序: ...

  6. Redis in .NET Core 入门:(1) 安装和主要功能简介

    Redis(https://redis.io/), 是一个内存中的数据结构存储系统,它可以用作数据库.缓存和消息中间件. 安装Redis 我很少在开发机中直接装各种数据库,我一般使用Docker,针对 ...

  7. 【java线程池】

    一.概述 1.线程池的优点 ①降低系统资源消耗,通过重用已存在的线程,降低线程创建和销毁造成的消耗: ②提高系统响应速度,当有任务到达时,无需等待新线程的创建便能立即执行: ③方便线程并发数的管控,线 ...

  8. pycharm安装svn插件

    弄了svn的服务端和客户端,为了方便我pycharm的使用,我又在pycharm里进行了配置,要用到subversion 下载 https://sourceforge.net/projects/win ...

  9. 【最短路径Floyd算法详解推导过程】看完这篇,你还能不懂Floyd算法?还不会?

    简介 Floyd-Warshall算法(Floyd-Warshall algorithm),是一种利用动态规划的思想寻找给定的加权图中多源点之间最短路径的算法,与Dijkstra算法类似.该算法名称以 ...

  10. python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍

    目录 python学习第七讲,python中的数据类型,列表,元祖,字典,之元祖使用与介绍 一丶元祖 1.元祖简介 2.元祖变量的定义 3.元祖变量的常用操作. 4.元祖的遍历 5.元祖的应用场景 p ...