集合特点: 无序;不能重复
/**
* @Description: 集合
* @Author: 谭舒琪
* @Date: 2022-12-29 14:19:12
* @LastEditTime: 2022-12-29 14:19:12
* @LastEditors: Please set LastEditors
*/
function Set() {
this.items = {}
// 添加
Set.prototype.add = (value) => {
if (this.has(value)) {
return false
}
this.items[value] = value
return true
}
// 移除一个值
Set.prototype.remove = (value) => {
if (!this.has(value)) {
return false
}
delete this.items[value]
return true
}
// 移除所有值
Set.prototype.clear = () => {
this.items = {}
}
// 获取大小
Set.prototype.size = () => {
return Object.keys(this.items).length
}
// 获取所有的值
Set.prototype.values = () => {
return Object.values(this.items)
}
// 判断值是否在集合中
Set.prototype.has = (value) => {
return this.items.hasOwnProperty(value)
}
// 求集合的并集
Set.prototype.union = (objectSet) => {
let newSet = new Set()
let values = Object.keys(this.items)
for (let i = 0; i < values.length; i++) {
newSet.add(values[i])
}
let values2 = Object.values(objectSet)[0]
for (let i = 0; i < values2.length; i++) {
newSet.add(values2[i])
}
return newSet
}
// 求集合交集
Set.prototype.intersection = (objectSet) => {
let newSet = new Set()
let values = Object.keys(this.items)
let values2 = Object.keys(objectSet['items'])
for (let i = 0; i < values.length; i++) {
if (values2.indexOf(values[i]) !== -1) {
newSet.add(values[i])
}
}
return newSet
}
// 求集合差集
Set.prototype.differ = (objectSet) => {
let newSet = new Set()
let values = Object.keys(this.items)
let values2 = Object.keys(objectSet['items'])
for (let i = 0; i < values.length; i++) {
if (values2.indexOf(values[i]) === -1) {
newSet.add(values[i])
}
}
return newSet
}
// 求集合子集
Set.prototype.son = (objectSet) => {
let newSet = new Set()
let values = Object.keys(this.items)
let values2 = Object.keys(objectSet['items'])
if (values.length > values2.length) {
return new Set()
}
console.log(values, values2)
let isSon = true
for (let i = 0; i < values.length; i++) {
if (values2.indexOf(values[i]) === -1) {
isSon = false
} else {
newSet.add(values[i])
}
}
if (!isSon) {
return new Set()
} else {
return newSet
}
}
}