JavaScript——集合结构

mac2022-06-30  23

JavaScript——集合结构

//集合类 function Set(){ //存放集合中的属性 this.items = {} /* * 1. has方法,判断集合中是否包含指定属性 */ Set.prototype.has = function(value){ return this.items.hasOwnProperty(value) } /* * 2. add方法,添加一个新的属性 */ Set.prototype.add = function(value){ //判断是否已经存在此属性 if (this.has(value)){ return false } this.items[value] = value return true } /* * 3. remove方法,移除指定属性 */ Set.prototype.remove = function(value){ if (this.has(value) == false){ return false } delete this.items[value] return true } /* * 4. clear方法,清除所有属性 */ Set.prototype.clear = function(){ //使items重新指向一个空对象 this.items = {} } /* * 5. size方法,获取集合长度 */ Set.prototype.size = function(){ return Object.keys(this.items).length } /* * 6. values方法,获取集合中的所有属性值 */ Set.prototype.values = function(){ return Object.keys(this.items) } /* * * 集合与集合间的操作 * this为本集合 ,otherSet为另一集合 * * 1. union方法,返回两个集合的并集 */ Set.prototype.union = function(otherSet){ //新建一个并集对象 let unionSet = new Set() //将本集合的所有元素加入到并集对象中 let values = this.values() for (let i = 0; i < this.size(); i++){ unionSet.add(values[i]) } //将另一集合的所有元素加入到并集对象中 values = otherSet.values() for (let i = 0; i < otherSet.size(); i++){ unionSet.add(values[i]) } return unionSet } /* * 2. intersection方法,返回两个集合的交集 */ Set.prototype.intersection = function(otherSet){ //创建交集对象 let intersection = new Set() //获取本集合的所有元素 let values = this.values() //遍历本集合所有元素,判断是否存在另一集合中,若存在则添加到intersection对象中 for (let i = 0; i < this.size(); i++){ if (otherSet.has(values[i])){ intersection.add(values[i]) } } return intersection } /* * 3. difference方法,返回两个集合的差集(元素存在于本集合中,而不存在于另一集合中) */ Set.prototype.difference = function(otherSet){ //创建差集对象 let difference = new Set() let values = this.values() //遍历本集合所有元素,判断是否存在另一集合中,若不存在则添加到difference对象中 for (let i = 0; i< this.size(); i++){ if (otherSet.has(values[i]) == false){ difference.add(values[i]) } } return difference } /* * 4. isSubset方法,判断本集合是否为另一集合的子集 */ Set.prototype.isSubset = function(otherSet){ //如果本集合长度大于另一集合长度,则本集合必然不是另一集合的子集,返回false if (this.size() > otherSet.size()){ return false } let values = this.values() for (let i =0; i < this.size(); i++){ //一旦本集合中某个元素不存在于另一集合中,则返回false if (otherSet.has(values[i]) == false){ return false } } //遍历完成说明本集合所有元素都存在于另一集合,属于另一集合的子集,返回true return true } }
最新回复(0)