js数据结构描述--集合

<script type="text/javascript">
    //如何判断一个数组是否存在某一元素
	//var arr = [1,2,3,5];
    //var arr = {a:1,b:2,c:3};

	function Set(data){
		this.constructor = set;
		this.dataStore = Object.prototype.toString.apply(data) == ‘[object Array]‘ ? data : [];
		this.in_array = in_array;
		this.size = size;
		this.add = add;
		this.remove = remove;
		this.show = show;
		this.union = union;
		this.intersect = intersect;	//求两个集合的交集
		this.is_subset = is_subset;	//判断一个集合是否是该集合的子集
		this.diff = diff;
	}
	
	//判断数组中是否存在某个元素
    function in_array(element){
		var position = this.dataStore.indexOf(element);
		return position < 0 ? false : position;
    }
	
	function add(element){
		if(!this.in_array(element,this.dataStore)){
			this.dataStore.push(element);
			return true;
		}else{
			return false;
		}
	}
	
	function remove(element){
		var position = this.in_array(element,this.dataStore);
		if(position){
			this.dataStore.splice(position,1);
			return true;
		}else{
			return false;
		}
	}
	
	
	//求两个集合的并集  
	function union(data){
		var result = this.dataStore.slice();	//js默认为引用传递
		var temp = new Set(data);
		temp.dataStore = data;
		
		for(var i=0;i<temp.size();i++){
			if(this.in_array(temp.dataStore[i],this.dataStore) === false){
				result.push(temp.dataStore[i]);
			}
		}
		return result.sort();
	}
	
	//求两个集合的交集
	function intersect(data){
		var result = [];
		var all = this.union(data);
		var temp = new Set(data);
		for(var i=0;i<all.length;i++){
			if(this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) !== false){
				result.push(all[i]);
			}
		}
		return result;
	}
	
	//求集合1与集合2的差集
	function diff(data){
		var result = [];			//结果集
		var all = this.union(data);
		
		var temp = new Set(data);
		temp.dataStore = data;
		
		for(var i=0;i<all.length;i++){
			if(this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) === false){
				result.push(all[i]);
			}
		}
		return result.sort();
	}
	
	
	//求集合的补集
	function  complement(){
		
	}
	
	
	//判断一个集合是否是另一个集合的子集
	function is_subset(data){
		var temp = new Set(data);
		for(var i=0;i<temp.size();i++){
			if(!this.in_array(temp.dataStore[i],this.dataStore)){
				return false;
			}
		}
		return true;
	}
	
	/*
	function diff(data){
		var result = [];			//结果集
		var all = this.union(data);
		
		var temp = new Set(data);
		temp.dataStore = data;
		
		for(var i=0;i<all.length;i++){
			if((this.in_array(all[i],this.dataStore) === false && temp.in_array(all[i],temp.dataStore) !== false) || (this.in_array(all[i],this.dataStore) !== false && temp.in_array(all[i],temp.dataStore) === false)){
				result.push(all[i]);
			}
		}
		return result.sort();
	}
	*/
	
	
	function size(){
		return this.dataStore.length;
	}
	
	function show(){
		return this.dataStore;
	}
	
	
	var arr1 = [0,1,2,3];
	var arr2 = [1,2,3];
	var set = new Set(arr1);
	//alert(set.size());			//获取集合有几个元素
	//set.remove(5);
	alert(set.is_subset(arr2));
	//alert(set.union(arr2));
	//alert(set.show());
</script>

  

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。