集合
数据结构 - 集合,不重复。
// 集合实现
// ES5
var MySet = function() {
var items = {};
// 检查元素是否存在
this.has = function(value) {
return items.hasOwnProperty(value);
};
// 添加元素
this.add = function(value) {
// 集合不重复 - 先检查元素是否存在
if (!this.has(value)) {
items[value] = value;
return value;
}
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 i in items) {
// if (items.hasOwnProperty(i)) {
// count++;
// }
// }
// return count;
return Object.keys(items).length;
};
// 获取集合元素
this.value = function() {
var values = [];
for (var i in items) {
if (items.hasOwnProperty(i)) {
values.push(items[i]);
}
}
return values;
};
// 并集
this.union = function(oSet) {
var sSet = new MySet();
// 获取自己的值
var arr = this.value();
for (var i in arr) {
sSet.add(arr[i]);
}
// 操作另一个集合
var oarr = oSet.value();
for (var i in oarr) {
sSet.add(oarr[i]);
}
return sSet;
};
// 交集
this.intersection = function(oSet) {
var sSet = new MySet();
// 获取自己的值
var arr = this.value();
for (var i in arr) {
if (oSet.has(arr[i])) {
sSet.add(arr[i]);
}
}
return sSet;
};
// 差集
this.difference = function(oSet) {
var sSet = new MySet();
// 获取自己的值
var arr = this.value();
for (var i in arr) {
if (!oSet.has(arr[i])) {
sSet.add(arr[i]);
}
}
return sSet;
};
// 检查items
this.getItem = function() {
return items;
};
};
var A = new MySet();
A.add(1);
A.add(2);
A.add(3);
var B = new MySet();
B.add(2);
B.add(3);
B.add(4);
ES6 - set集合。
// ES6 set
var s = new Set();
s.add(1);
s.add(2);
s.add(3);
// 遍历
// s.forEach(function(value, value2, set) {
// console.log(value);
// console.log(value2);
// console.log(set);
// });
// 迭代器
var interator = s.entries();
interator.next();
interator.next();
interator.next();
interator.next();
// WeakSet
// var w = new WeakSet();
// var obj = {'name': 'Brady'};
// w.add(obj);
// console.log(w);
var A = new Set();
A.add(1);
A.add(2);
A.add(3);
var B = new Set();
B.add(2);
B.add(3);
B.add(4);
// 并集
console.log(new Set([...A, ...B]));
// 交集
console.log(new Set([...A].filter(item => B.has(item))));
// 差集
console.log(new Set([...A].filter(item => !B.has(item))));