javascript集合的交,并,补,子集的操作实现
可能新的ECMA规范里已有了这些的实现,
但能自己从头开始实现,感觉也非常不错的哟。。。
function Set() { var items = {}; this.has = function(value){ return items.hasOwnProperty(value); }; this.add = function(value){ if (!this.has(value)){ items[value] = value; return true; } return false; }; this.remove = function(value){ if (this.has(value)) { delete items[value]; return true; } return false; }; this.clear = function(){ items = {}; }; this.size = function(){ var count = 0; for (var prop in items){ if(items.hasOwnProperty(prop)){ ++count; } } return count; }; this.values = function(){ var keys = []; for (var key in items){ keys.push(key); } return keys; }; this.union = function(otherSet){ var unionSet = new Set(); var values = this.values(); for(var i=0; i<values.length; i++){ unionSet.add(values[i]); } var values = otherSet.values(); for(var i=0; i<values.length; i++){ unionSet.add(values[i]); } return unionSet; }; this.intersection = function(otherSet){ var intersectionSet = new Set(); var values = this.values(); for(var i=0; i<values.length; i++){ if (otherSet.has(values[i])){ intersectionSet.add(values[i]); } } return intersectionSet; }; this.difference = function(otherSet){ var differenceSet = new Set(); var values = this.values(); for(var i=0; i<values.length; i++){ if(!otherSet.has(values[i])){ differenceSet.add(values[i]); } } return differenceSet; }; this.subset = function(otherSet){ if (this.size() > otherSet.size()){ return false; } else { var values = this.values(); for(var i=0; i<values.length; i++){ if(!otherSet.has(values[i])){ return false; } } return true; } } } var set = new Set(); set.add(1); console.log(set.values()); //输出["1"] console.log(set.has(1)); //输出true console.log(set.size()); //输出1 set.add(2); console.log(set.values()); //输出["1", "2"] console.log(set.has(2)); //true console.log(set.size()); set.remove(1); console.log(set.values()); //输出["2"] set.remove(2); console.log(set.values()); //输出[] var setA = new Set(); setA.add(1); setA.add(2); setA.add(3); var setB = new Set(); setB.add(3); setB.add(4); setB.add(5); setB.add(6); var unionAB = setA.union(setB); console.log(unionAB.values()); var setA = new Set(); setA.add(1); setA.add(2); setA.add(3); var setB = new Set(); setB.add(2); setB.add(3); setB.add(4); var intersectionAB = setA.intersection(setB); console.log(intersectionAB.values()); var setA = new Set(); setA.add(1); setA.add(2); setA.add(3); var setB = new Set(); setB.add(2); setB.add(3); setB.add(4); var differenceAB = setA.difference(setB); console.log(differenceAB.values()); var setA = new Set(); setA.add(1); setA.add(2); var setB = new Set(); setB.add(1); setB.add(2); setB.add(3); var setC = new Set(); setC.add(2); setC.add(3); setC.add(4); console.log(setA.subset(setB)); console.log(setA.subset(setC));
javascript集合的交,并,补,子集的操作实现的更多相关文章
- javascript集合的交,并,补,子集,长度,新增,删除,清空等操作
<!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat=&qu ...
- python集合set{ }、集合函数及集合的交、差、并
通过大括号括起来,用逗号分隔元素,特点 1.由不同元素组成,如果定义时存在相同元素,处理时会自动去重 2.无序 3.元素只能是不可变类型,即数字.字符串.布尔和元组,但集合本身可变 4.可直接定义集合 ...
- javascript集合求交集
两集合求交集 思路: 1. 每一次从B数组中取一值,然后在A数组里逐个比较,如果有相等的,则保存.该算法复杂度为 O(MN). M, N 分别为数组 A B 的长度. 2. 因为A B 都排过序,所以 ...
- 【m元素集合的n个元素子集】
/* m元素集合的n个元素子集 说明: 假设有个集合拥有m个元素,任意的从集合中取出n个元素,则这n个元素所形成的可能子集有那些? 解法: 假设有5个元素的集点,取出3个元素的可能子集如下: {1 2 ...
- [java] 求2个集合的交 差 并集
要求2个集合的交 差 并集. set集合,如下 import java.util.HashSet; import java.util.Set; public class SetTest { publi ...
- 集合运算 - Java实现集合的交、并、差
1.使用java的Set实现集合的交.并.差 package com.lfy.Set; import java.util.HashSet; import java.util.Set; /** * 集合 ...
- 【JavaScript实用技巧(二)】Js操作DOM(由问题引发的文章改版,新人大佬都可)
[JavaScript实用技巧(二)]Js操作DOM(由问题引发的文章改版,新人大佬都可!) 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人 ...
- C# 集合已修改;可能无法执行枚举操作
在winform 项目时遇到: 集合已修改;可能无法执行枚举操作的问题 错误原因:当用foreach遍历Collection时,如果对Collection有Add或者Remove或其他类似操作都会有这 ...
- Collection was modified; enumeration operation may not execute Dictionary 集合已修改;可能无法执行枚举操作
public void ForeachDic() { Dictionary dic = new Dictionary(); dic.Add("1", 10); dic.Add(&q ...
随机推荐
- c++ std::string.c_str()
语法: const char *c_str();搜索 c_str()函数返回一个指向正规C字符串的指针, 内容与本string串相同. 这是为了与c语言兼容,在c语言中没有string类型,故必须通过 ...
- spring事务学习(转账案例)(一)
一.创建数据库并插入数据 create database spring_transaction; use spring_transaction; create table account( id in ...
- Spring MVC GET 从客户端数据到服务器端的乱码和服务器端数据到客户端的乱码
参考资料:http://m.oschina.net/blog/376339 乱码的本质是涉及到编解码的几个过程所用的编码方式不一样. 一.从服务端到客户端 在整个服务器端数据返回到浏览器的过程中,涉及 ...
- [LeetCode] Word Ladder II
Given two words (start and end), and a dictionary, find all shortest transformation sequence(s) from ...
- 菜鸟写的第一个chrome插件
一.新建一个文件夹,用来放插件的代码 二.首先新建配置文件manifest.json // 开发参考:http://open.chrome.360.cn/extension_dev/overview. ...
- ASP.NET MVC 数据分页
作为一个菜鸟级的程序猿,总结一下学到的两种数据分页. 1.真分页 真分页就是需要时从数据库里读出需要多的数据,利用存储过程可实现.网上的分页SQL特别多,数据库自带的一些方法也可方便的帮助分页,但是我 ...
- asp.net预定义的HttpModule
在asp.net中,已经预定义了很多HttpModule,甚至在服务器的网站配置文件中进行了注册,我们可以通过系统文件夹C:\Windows\Microsoft.NET\Framework\v4.0. ...
- 和我一起来了解SEO
基础知识 搜索引擎 搜索引擎爬虫会检索各个网站,分析他们的关键字,从一个连接到另一个连接,如果爬虫觉得这个关键字是有用的 就会存入搜索引擎数据库,反之如果没用的.恶意的.或者已经在数据库的,就会舍弃. ...
- Linux简单的常用命令——纯手打(慢慢积累)
==============linux下快捷键==================ctrl+insert 复制shift +insert 粘贴 输入文件名的前三个字母,按tab键自动补全文件名 在vi ...
- java笔记--策略模式和简单工厂模式
策略模式: --如果朋友您想转载本文章请注明转载地址"http://www.cnblogs.com/XHJT/p/3884781.html "谢谢-- 为什么使用:策略模式主要用于 ...