集合
集合是由一組無(wú)序且唯一的項(xiàng)組成的
6.1 創(chuàng)建一個(gè)集合
function Set() {
var items = {};
/*
add(value):向集合添加一個(gè)新的項(xiàng)
removeremove(value):從集合中移除一個(gè)值
has(value):如果值在集合中存在,返回true,否則false
clear(): 移除集合里所有的項(xiàng)
size():返回集合所包含元素的數(shù)量
values():返回一個(gè)包含集合中所有值的數(shù)組
*/
// has(value)方法
this.has = function (value) {
return items.hasOwnProperty(value);
};
// add(value)方法
this.add = function (value) {
if (!this.has(value)) {
items[value] = value;
return true;
}
return false;
};
// remove(value)方法
this.remove = function (value) {
if (this.has(value)) {
delete items[value];
return true;
}
return false;
};
// clear()方法
this.clear = function () {
items = {};
};
// size()方法
this.size = function () {
return Object.keys(items).length;
};
// values()方法
this.values = function () {
return Object.keys(items);
};
}
// 使用Set類(lèi)
var set = new Set();
set.add(1);
console.log(set.values());
console.log(set.has(1));
console.log(set.size());
set.add(2);
console.log(set.values());
console.log(set.has(2));
console.log(set.size());
set.remove(1);
console.log(set.values());
set.remove(2);
console.log(set.values());
6.2 集合操作
并集跑揉,交集锅睛,差集,子集
// 并集
this.union = function (other) {
var union = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
union.add(values[i]);
}
values = other.values();
for (var i = 0; i < values.length; i++) {
union.add(values[i]);
}
return union;
};
// 交集
this.intersection = function (other) {
var section = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (other.has(values[i])) {
section.add(values[i]);
}
}
return section;
};
// 差集
this.difference = function (other) {
var difference = new Set();
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (!other.has(values[i])) {
difference.add(values[i]);
}
}
return difference;
};
// 子集
this.subset = function (other) {
if (this.size() > other.size()) {
return false;
} else {
var values = this.values();
for (var i = 0; i < values.length; i++) {
if (!other.has(values[i])) {
return false;
}
}
return true;
}
};