您的位置:首页 > Web前端 > JavaScript

javascript集合的交,并,补,子集的操作实现

2016-08-28 20:08 666 查看
可能新的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()); //2
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));


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: