集合 -- es5实现
2018-06-21 本文已影响0人
安石0
集合是由一组无序且唯一(不能重复的)的项组成,这个数据结构与有限集合相同的数学概念,但应用在计算机科学的数据结构中。
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, 集合的操作
集合操作图解.png2.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
}
}