记录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 startActivity原理分析(基于Android 8.1 AOSP)
应用进程内 如何使用Intent做Activity的跳转 Intnet intent = new Intent(MainActivity.this,TestActivity.class); start ...
- 使用 FFT 进行频谱分析
下面的示例说明了如何使用 FFT 函数进行频谱分析.FFT 的一个常用场景是确定一个时域噪声信号的频率分量. 首先创建一些数据.假设是以 1000 Hz 的频率对数据进行的采样.首先为数据构造一条时间 ...
- SQLServer之创建链接服务器
创建链接服务器注意事项 当我们要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中就必须要创建远程数据库的DBLINK,通过DBLINNK数据库可以像访问本地数据库一样访问远程数据库表中的数据 ...
- Windows-删除Windows Server backup卷影副本
现有环境中有一台Windows Server做过定期备份计划,时间太久未做清理操作,收到磁盘报警邮件后需要及时释放该空间,具体操作步骤如下: 当前备份计划信息如下: 清理步骤如下: 1.以管理身份运行 ...
- Exp2后门原理与实践 20164312马孝涛
实验内容 使用netcat获取主机操作Shell,cron启动 (0.5分) 使用socat获取主机操作Shell, 任务计划启动 (0.5分) 使用MSF meterpreter(或其他软件)生成可 ...
- 在docker私有仓库如何查看有哪些镜像?
搭建了docker私有仓库,上传了一些镜像,时间长了就会忘了有哪些镜像,在网上查了,有大佬是通过脚本查看的,多厉害! #!/usr/bin/env python#-*- coding:utf-8 -* ...
- 深入介绍Java中的锁[原理、锁优化、CAS、AQS]
1.为什么要用锁? 锁-是为了解决并发操作引起的脏读.数据不一致的问题. 2.锁实现的基本原理 2.1.volatile Java编程语言允许线程访问共享变量, 为了确保共享变量能被准确和一致地更新, ...
- Ubuntu 18.04.1 LTS + kolla-ansible 部署 openstack Rocky all-in-one 环境
1. kolla 项目介绍 简介 kolla 的使命是为 openstack 云平台提供生产级别的.开箱即用的自动化部署能力. kolla 要实现 openetack 部署分为两步,第一步是制作 do ...
- Python开发:Python2和Python3的共存和切换使用
从python2到python3,这两个版本可以说是从语法.编码等多个方面上都有很大的差别.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向下相容,也就是说许多针对早期Python2版 ...
- 【Linux基础】压缩和解压
Linux 常用的压缩与解压文件类型:.tar,.gz..tar.gz,.bz2..tar.bz2,.Z..tar.Z,.zip,.rar等. Linux 常用的压缩与解压缩命令有:tar,gzip. ...