文章目录
1.概述
差不多所有的编程语言中,都存在集合结构。
特点:
1.集合通常是由一组无序的、不能重复的元素构成
2.我们可以将集合看成一个特殊的数组,特殊在于它里面的元素没有顺序,也不能重复,没有顺序也意味着不能通过下标值进行访问。
2.封装一个Set集合
在ES6中其实已经包含了集合Set类,让我们试着封装以下
<script>
function Set() {
this.items = {};
// 1.添加数据
Set.prototype.add = function (data) {
if (this.has(data)) return false;
this.items[data] = data;
return true
}
// 2.判断是否含有
Set.prototype.has = function (data) {
return this.items.hasOwnProperty(data)
}
// 3.删除数据
Set.prototype.delete = function (data) {
if (!this.has(data)) return false;
delete this.items[data];
return true
}
// 4.清除所有
Set.prototype.clear = function () {
this.items = {};
return true
}
// 返回长度
Set.prototype.size = function () {
return Object.keys(this.items).length;
}
// 返回所有元素
Set.prototype.values = function () {
return Object.keys(this.items);
}
// 1.求并集
Set.prototype.union = function (otherSet) {
let values = this.values();
let item = null;
let unionSet = new Set();
for (let i = 0; i < values.length; i++) {
item = values[i];
unionSet.add(item)
}
values = otherSet.values();
for (let i = 0; i < values.length; i++) {
item = values[i];
unionSet.add(item)
}
return unionSet;
}
// 2.求交集
Set.prototype.inter = function (otherSet) {
let values = this.values();
let item = null;
let interSet = new Set();
for (let i = 0; i < values.length; i++) {
item = values[i];
if (otherSet.has(item))
interSet.add(item)
}
return interSet;
}
// 3.求差集
Set.prototype.diff = function (otherSet) {
let values = this.values();
let item = null;
let diffSet = new Set();
for (let i = 0; i < values.length; i++) {
item = values[i];
if (!otherSet.has(item))
diffSet.add(item)
}
return diffSet;
}
// 4.求子集
Set.prototype.subSet = function (otherSet) {
let values = this.values();
let item = null;
for (let i = 0; i < values.length; i++) {
item = values[i];
if (!otherSet.has(item))
return false
}
return true;
}
}
</script>