版权声明:转载请注明出处 https://blog.csdn.net/wushichao0325/article/details/86005685
Javascript之数据结构与算法的Set实现
1.ES6中的Set
请参考官网API:http://caibaojian.com/es6/set-map.html
2.自实现Set
class Set{
constructor(){
this.items={};
}
has(key){
return key in this.items;
}
_has(key){
return this.items.hasOwnProperty(key);
}
add(key){
if(!this.has(key)){
this.items[key]=key;
return true;
}
return false;
}
remove(key){
if(this.has(key)){
delete this.items[key];
return true;
}
return false;
}
clear(){
this.items={};
}
size(){
return Object.keys(this.items).length;
}
values(){
let values=[];
for(let key in this.items){
if(this.items.hasOwnProperty(key)){
values.push(this.items[key])
}
}
return values;
}
union(otherSet){
let unionSet=new Set();
let values=this.values();
for(let i=0;i<values.length;i++){
unionSet.add(values[i]);
}
values=otherSet.values();
for(let i=0;i<values.length;i++){
unionSet.add(values[i]);
}
return unionSet;
}
intersection(otherSet){
let intersectionSet=new Set();
let values=this.values();
for(let i=0;i<values.length;i++){
if(otherSet.has(values[i])){
intersectionSet.add(values[i]);
}
}
return intersectionSet
}
difference(otherSet){
let differenceSet=new Set();
let values=this.values();
for(let i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
differenceSet.add(values[i]);
}
}
return differenceSet;
}
isSubset(otherSet){
if(this.size()>otherSet.size()){
return false;
}else{
let values=this.values();
for(let i=0;i<values.length;i++){
if(!otherSet.has(values[i])){
return false;
}
}
return true;
}
}
}
let set = new Set();
// set.add(1);
// console.log(set.values());
// console.log(set.has(1));
// console.log(set.size());
// set.add(2);
// console.log(set.values());
// console.log(set.has(2));
// console.log(set.size());
// set.remove(1);
// console.log(set.values());
//-------------------------------并集---------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let unionAB=setA.union(set);
// console.log(unionAB.values());
//-------------------------------交集---------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let intersectionAB=setA.intersection(set);
// console.log(intersectionAB.values());
//-----------------------------差集------------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// setA.add(4);
// let differenceAB=setA.difference(set);
// console.log(differenceAB.values());
//---------------------------子集------------------------------
// set.add(1);
// set.add(2);
// set.add(3);
// let setA=new Set();
// setA.add(2);
// setA.add(3);
// let isSubsetAB=setA.isSubset(set);
// console.log(isSubsetAB);