1. 集合
- 集合通常是由一组无序的,不能重复的元素构成
- 集合是一种特殊的数组
- 特殊之处在与里面的元素没有顺序,也不能重复
- 没有顺序就代表不能通过下标去获取值,不能重复表示在一个集合中相同的数据只会存在一分
- 在ES6中的Set就是一个集合
1.1 集合的封装
class Set {
constructor() {
this.obj = {}
this.size = 0
}
add(value) {
if (this.has(value)) {
throw new Error("集合中不能添加相同的属性")
}
this.obj[value] = value
this.size++
}
remove(value) {
if (!this.has(value)) {
throw new Error("集合中没有当前属性,删除不了")
}
delete this.obj[value]
this.size--
}
has(value) {
return this.obj.hasOwnProperty(value)
}
clear() {
this.obj = {}
this.size = 0
}
size() {
return this.size
}
values() {
return Object.keys(this.obj)
}
union(otherSet) {
let newSet = new Set()
let values = this.values()
for (let i = 0; i < values.length; i++) {
newSet.add(values[i])
}
let otherValues = otherSet.values()
for (let i = 0; i < otherValues.length; i++) {
if (!newSet.has(otherValues[i])) {
newSet.add(otherValues[i])
}
}
return newSet
}
intersection(otherSet) {
let newSet = new Set()
let values = this.values()
for (let i = 0; i < values.length; i++) {
let item = values[i]
if (otherSet.has(item)) {
newSet.add(item)
}
}
return newSet
}
difference(otherSet) {
let newSet = new Set()
let values = this.values()
for (let i = 0; i < values.length; i++) {
let item = values[i]
if (!otherSet.has(item)) {
newSet.add(item)
}
}
return newSet
}
subset(otherSet) {
let otherValues = otherSet.values()
for (let i = 0; i < otherValues.length; i++) {
if (!this.has(otherValues[i])) {
return false
}
}
return true
}
}