JavaScript——集合结构

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
	}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章