集合 -- es5實現
集合是由一組無序且唯一(不能重複的)的項組成,這個資料結構與有限集合相同的數學概念,但應用在電腦科學的資料結構中。
es6中set類:ES6 提供了新的資料結構 Set。它類似於陣列,但是成員的值都是唯一的,沒有重複的值.
1,es5的方法實現es6的方法
function mySet(){
let items = {};
this.size = function(){
return Object.keys(items).length
}
this.has = function(value){
items.hasOwnProperty(value)
}
this.add = function (value){
if(!this.has[value]){
items[value] = value
return true
}
return false
}
this.keys = function(){
return Object.keys(items)
}
this.values = function(){
return Object.values(items)
}
this.clear = function(){
items = {}
}
this.delete = function(value){
if(this.has(value)){
delete items[value]
return true
}
return false
}
}
2, 集合的操作
2.1 並集
mySet增加一個方法
this.union = function(B){
let unionSet = new mySet()
let values = this.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
values = B.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
return unionSet
}
2.2交集
this.overlap=function(B){
let overlapSet = new mySet()
let values = this.values()
let overlapArr = values.filter(v=>B.has(v))
for(let i=0;i<overlapArr.length;i++){
overlapSet.add(overlapArr[i])
}
return overlapSet
}
2.3差集
this.diffSet=function(B){
let diffSet = new mySet()
let values = this.values()
for(let i =0;i<values.length;i++){
if(!B.has(values[i])){
diffSet.add(values[i])
}
}
return diffSet
}
結果如圖
2.4子集
this.subset=function(B){
if(this.size()>B.size()){
return false
}
let values = this.values
for(let i=0;i<values.length;i++){
if(!B.has(values[i])){
return false
}
}
return true
}
3 所有程式碼
function mySet(){
let items = {};
this.size = function(){
return Object.keys(items).length
}
this.has = function(value){
return items.hasOwnProperty(value)
}
this.add = function (value){
if(!this.has[value]){
items[value] = value
return true
}
return false
}
this.keys = function(){
return Object.keys(items)
}
this.values = function(){
return Object.values(items)
}
this.clear = function(){
items = {}
}
this.delete = function(value){
if(this.has(value)){
delete items[value]
return true
}
return false
}
this.union = function(B){
let unionSet = new mySet()
let values = this.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
values = B.values()
for(let i=0;i<values.length;i++){
unionSet.add(values[i])
}
return unionSet
}
this.overlap=function(B){
let overlapSet = new mySet()
let values = this.values()
let overlapArr = values.filter(v=>B.has(v))
for(let i=0;i<overlapArr.length;i++){
overlapSet.add(overlapArr[i])
}
return overlapSet
}
this.diffSet=function(B){
let diffSet = new mySet()
let values = this.values()
for(let i =0;i<values.length;i++){
if(!B.has(values[i])){
diffSet.add(values[i])
}
}
return diffSet
}
this.subset=function(B){
if(this.size()>B.size()){
return false
}
let values = this.values
for(let i=0;i<values.length;i++){
if(!B.has(values[i])){
return false
}
}
return true
}
}
相關文章
- ES5 如何實現 Class
- 如何用es5實現繼承繼承
- js實現簡易的touch事件(es5)JS事件
- 集合-運算實現
- es6 class繼承用es5實現繼承
- 回顧 ES5新增陣列方法 與實現陣列
- redis有序集合實現實時排名Redis
- 基於ES5`defineProperty` 實現簡單的 Mvvm框架MVVM框架
- ES6 中 class 和 extends 的es5實現
- 如何在 ES5 環境下實現一個const ?
- jsp下實現遍歷集合JS
- 前端面試題:如何使用ES5 實現Array.from()前端面試題
- ES5和ES6中對繼承的實現繼承
- Java 基礎 - 各項集合實現Java
- golang實現常用集合原理介紹Golang
- ES5實現ES6的一些方法-call,bind,is,promisePromise
- 實現Java集合迭代的高效能Java
- 用es5實現es6的promise,徹底搞懂promise的原理Promise
- 使用Redis的有序集合實現排行榜功能Redis
- JAVA集合框架中的常用集合及其特點、適用場景、實現原理簡介Java框架
- 基於Redis無序集合實現禁止多端登入Redis
- 使用 Redis 有序集合實現 IP 歸屬地查詢Redis
- Java集合類,從原始碼解析底層實現原理Java原始碼
- JavaScript資料結構——集合的實現與應用JavaScript資料結構
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- 筆記-集合NSSet、字典NSDictionary的底層實現原理筆記
- Java集合實戰Java
- PHP+Redis 有序集合實現 24 小時排行榜實時更新PHPRedis
- redis之有序集合型別(Zset)——排行榜的實現Redis型別
- foreach 實現 MyBatis 遍歷集合與批量運算元據MyBatis
- Python實現求多個集合之間並集的方法Python
- spring應用手冊-IOC(XML配置實現)-(26)-注入set集合SpringXML
- Java中如何使用泛型實現介面中的列表集合?Java泛型
- SICP:符號求導、集合表示和Huffman樹(Python實現)符號求導Python
- Java集合為什麼設計為:實現類繼承了抽象類,同時實現抽象類實現的介面Java繼承抽象
- Laravel集合探學系列——高階訊息傳遞實現(二)Laravel
- es5 原型式繼承原型繼承
- Java大型資料集合實現並行加速處理幾種方法 - DZoneJava並行