集合 -- 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事件
- 集合-運算實現
- 回顧 ES5新增陣列方法 與實現陣列
- es6 class繼承用es5實現繼承
- 基於ES5`defineProperty` 實現簡單的 Mvvm框架MVVM框架
- ES6 中 class 和 extends 的es5實現
- redis有序集合實現實時排名Redis
- 前端面試題:如何使用ES5 實現Array.from()前端面試題
- ES5和ES6中對繼承的實現繼承
- 如何在 ES5 環境下實現一個const ?
- golang實現常用集合原理介紹Golang
- Java 基礎 - 各項集合實現Java
- jsp下實現遍歷集合JS
- Java 併發集合的實現原理Java
- ES5實現ES6的一些方法-call,bind,is,promisePromise
- 實現Java集合迭代的高效能Java
- 用es5實現es6的promise,徹底搞懂promise的原理Promise
- 二叉搜尋樹的簡明實現(ES5 & ES6)
- 集合框架-用LinkedList實現棧結構框架
- Java 中實現集合的 keep in order (後續)Java
- C#函式實現的小功能集合C#函式
- awk+uniq實現集合減法運算
- 使用Redis的有序集合實現排行榜功能Redis
- JAVA集合框架中的常用集合及其特點、適用場景、實現原理簡介Java框架
- JavaScript資料結構——集合的實現與應用JavaScript資料結構
- 使用 Redis 有序集合實現 IP 歸屬地查詢Redis
- 筆記-集合NSSet、字典NSDictionary的底層實現原理筆記
- 基於Redis無序集合實現禁止多端登入Redis
- Java集合類,從原始碼解析底層實現原理Java原始碼
- 《閒扯Redis十一》Redis 有序集合物件底層實現Redis物件
- Redis 中的集合型別是怎麼實現的?Redis型別
- 用Scala實現集合中相鄰元素間的差值
- 自定義函式實現字串分割,返回集合型別函式字串型別
- Java集合實戰Java
- JavaScript原型鏈以及ES3、ES5、ES6實現繼承的不同方式JavaScript原型S3繼承
- PHP+Redis 有序集合實現 24 小時排行榜實時更新PHPRedis