集合
- 无重复性
- 有子集
set.js
var Set2 = function() {
var items = {};
// has检查元素是否存在
this.has = function(value) {
return items.hasOwnProperty(value);
}
//添加元素,集合是不重复的
this.add = function(value) {
if (this.has(value)) {
return false;
} else {
items[value] = value;
return value;
}
}
//移除元素
this.remove = function(value) {
if (this.has(value)) {
delete items[value]
return true;
} else {
return false;
}
}
//查看集合
this.getItems = function() {
return items;
}
//清除所有
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;
}
//查看所有的value
this.value = function() {
var values = [];
for (var i in items) {
if (items.hasOwnProperty(i)) {
values.push(items[i]);
}
}
return values;
}
}
复制代码
实例化
实现并集,交集,差集
并集
this.union = function(otherSet){
var resultSet = new Set2()
// 1 : 把自己的值提取出来
var arr = this.value()
for(var i = 0 ; i < arr.length ; i++){
resultSet.add(arr[i])
}
// 2.把另一只集合的值提取出来
arr = otherSet.value()
for(var i = 0 ; i < arr.length ; i++){
resultSet.add(arr[i])
}
return resultSet
}
复制代码
交集
this.intersection = function(otherSet){
var resultSet = new Set2()
var arr = this.value()
for(var i = 0 ; i < arr.length ; i++){
if(otherSet.has(arr[i])){
resultSet.add(arr[i])
}
}
return resultSet
}
复制代码
差集
this.difference =function(otherSet){
var resultSet = new Set2()
var arr = this.value()
for(var i = 0 ; i < arr.length ; i++){
if(otherSet.has(arr[i])){
// B中有 添加? 不添加!
} else {
resultSet.add(arr[i])
}
}
return resultSet
}
复制代码
es6中的Set
并集
var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var union = new Set([...a, ...b]);
console.log(union)
复制代码
交集
var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var intersect = new Set([...a].filter(x => b.has(x)));
console.log(intersect)
复制代码
差集
var a = new Set([1, 2, 3]);
var b = new Set([2, 3, 4]);
var different = new Set([...a].filter(x => !b.has(x)))
console.log(different)
复制代码