记录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:将多个查 ...
随机推荐
- Android利用RecyclerView实现列表倒计时效果
最近面试时,面试官问了一个列表倒计时效果如何实现,然后脑袋突然懵的了O(∩_∩)O,现在记录一下. 运行效果图 实现思路 实现方法主要有两个: 1.为每个开始倒计时的item启动一个定时器,再做更新i ...
- 003-005:Java平台相关的面试题
本文首发于公众号:javaadu 003:字节码是什么? 在Java中,字节码存放于以.class结尾的二进制文件. 字节码之于Java,类似于汇编语言之于C/C++.对于C/C++语言来说,不同的平 ...
- C++11新特性之tie、tuple的应用
//tuplestd::tuple<int, int, int, int, QString> Thorface::getUserInfoToJudgeOpendoor(QString st ...
- linux屏幕扩展、扩展屏幕的校准
#xrandr命令为屏幕扩展 #xinput命令为输入设备 #设置DSI-1为HDMI-1的右扩展 xrandr --output DSI- --right-of HDMI- --auto #DSI- ...
- windows2008无人值守安装域控制器
转自:https://blog.csdn.net/techviewer/article/details/26485017 unattend.txt文件: ; DCPROMO unattend fil ...
- python3 进一步了解装饰器 NLP第四条
还是先来抄一段NLP第四条: 四,只有感官经验塑造出来的世界,没有绝对的真实世界 每个人运用自己的感觉器官把资料摄入(摄入过程),由于感官运用是主观地有选择性的,因此不能,亦不需要把所有资料捕获. ...
- 我是如何自学 Python 的
不少初学 Python 或者准备学习 Python 的小伙伴问我如何学习 Python.今天就说说我当时是怎么学习的. 缘起 我大学专业是电气工程,毕业后做的是自动化方面的工作.对于高级语言编程基本是 ...
- 一篇读懂HTTPS:加密原理、安全逻辑、数字证书等
1.引言 HTTPS(全称: Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版.本文,就来深入介绍下其 ...
- eureka2.0页面404报错问题--之坑
eureka页面报错问题404页面如下 在复制pom文件的时候,记得启动eureka注册中心的pom文件引入依赖是否正确 启动类注解也要注意是否引用正确
- python接口自动化(六)--发送get请求接口(详解)
简介 如果想用python做接口测试,我们首先有不得不了解和学习的模块.它就是第三方模块:Requests. 虽然Python内置的urllib模块,用于访问网络资源.但是,它用起来比较麻烦,而且,缺 ...