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. Linux(CentOS 7)安装测试svn服务

    1.yum install subversion,通过yum安装svn服务 2.svnserve --version,查看是否安装成功 3.mkdir -p /home.svn,创建svn仓库目录 4 ...

  2. vue组件-构成组件-父子组件相互传递数据

    组件对于vue来说非常重要,学习学习了基础vue后,再回过头来把组件弄透! 一.概念 组件意味着协同工作,通常父子组件会是这样的关系:组件 A 在它的模版中使用了组件 B . 它们之间必然需要相互通信 ...

  3. Cocoa包管理器之Carthage详解及CocoaPods中心化+Carthage的二进制化

    上篇博客详细的聊了CocoaPods的相关内容,今天我们就来介绍另一个Cocoa的包管理器Carthage.在上家公司用Swift开发工程时,用的就是Carthage.Carthage诞生于14年11 ...

  4. JNI实战(四):C 调用 Java

    在前面我们讲了一下如何使用Java调用C,本文我们讲一下如何使用JNI提供的接口来反射得到Java方法进行调用. 主要步骤如下: FindClass (找到Java层的类) GetMethodID / ...

  5. wiringPi库的pwm配置及使用说明

    本文介绍树莓派(raspberry pi)在linux c 环境下的硬件pwm配置及使用方法. 1. 下载安装wiringPi 此步骤建议参考官网指南,wiringPi提供了对树莓派的硬件IO访问,包 ...

  6. 从壹开始前后端分离 [ Vue2.0+.NET Core2.1] 二十五║初探SSR服务端渲染(个人博客二)

    缘起 时间真快,现在已经是这个系列教程的下半部 Vue 第 12 篇了,昨天我也简单思考了下,可能明天再来一篇,Vue 就基本告一段落了,因为什么呢,这里给大家说个题外话,当时写博文的时候,只是想给大 ...

  7. js判断参数是否为非数字

    isNaN() 函数用于检查其参数是否是非数字值.

  8. PopupWindowMenuUtil【popupwindow样式菜单项列表】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 实现PopupWindow样式的Menu菜单. 效果图 代码分析 使用PopupWindow实现. 列表使用的是Recyclervi ...

  9. Condition条件变量

    条件变量是一种比较复杂的线程同步机制 #!/usr/bin/env python # -*- coding: utf-8 -*- """ 条件变量,线程间通信提供的另一种 ...

  10. 使用 ASP.NET Core MVC 创建 Web API(三)

    使用 ASP.NET Core MVC 创建 Web API 使用 ASP.NET Core MVC 创建 Web API(一) 使用 ASP.NET Core MVC 创建 Web API(二) 十 ...