集合
- 無重複性
- 有子集
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)
複製程式碼