当前位置:编程问答 > JS >

js中new 了两个Object数组。怎么样将数组内容合并,重复的内容?

问题:ARR1=[[1],[2],[3],[4]]; ARR2=[3],[4],[5],[6]]; 怎么才能让得到的ARR3=[[1],[2],[3],[4],[5],[6]]; 也就是去掉多余重复的?
答案:如果是普通数据类型, 非常简单

var ARR1=[1,2,3,4];
var ARR2=[3,4,5,6];

function mergeArray(arr1, arr2) {
	var _arr = [];
	for (var i = 0; i < arr1.length; i++) {
		_arr.push(arr1[i]);
	}
	var _dup;
	for (var i = 0; i < arr2.length; i++){
		_dup = false;
		for (var _i = 0; _i < arr1.length; _i++){
			if (arr2[i] === arr1[_i]){
				_dup = true;
				break;
			}
		}
		if (!_dup){
			_arr.push(arr2[i]);
		}
	}
	
	return _arr;
}


var b = mergeArray(ARR1, ARR2);
//b = [1, 2, 3, 4, 5, 6] 
//楼上的方法得到的是['1','2','3','4','5'], 转换成字符串了 

如果是复杂对象及数组, 则稍微麻烦一些, 需要序列化后比较

Object.prototype.Serialize = function()
{
var type = __typeof__(this);
switch(type)
{
case 'Array' :
{
var strArray = '[';
for ( var i=0 ; i < this.length ; ++i )
{
var value = '';
if ( this[i] )
{
value = this[i].Serialize();
}
strArray += value + ',';
}
if ( strArray.charAt(strArray.length-1) == ',' )
{
strArray = strArray.substr(0, strArray.length-1);
}
strArray += ']';
return strArray;
}
case 'Date' :
{
return 'new Date(' + this.getTime() + ')';
}
case 'Boolean' :
case 'Function' :
case 'Number' :
case 'String' :
{
return this.toString();
}
default :
{
var serialize = '{';
for ( var key in this )
{
if ( key == 'Serialize' ) continue;
var subserialize = 'null';
if ( this[key] != undefined )
{
subserialize = this[key].Serialize();
}
serialize += '\r\n' + key + ' : ' + subserialize + ',';
}
if ( serialize.charAt(serialize.length-1) == ',' )
{
serialize = serialize.substr(0, serialize.length-1);
}
serialize += '\r\n}';
return serialize;
}
}
}; 
Object.prototype.Equal = function(o) {
return this.Serialize() == o.Serialize();
};

function mergeArray(arr1, arr2) {
	var _arr = [];
	for (var i = 0; i < arr1.length; i++) {
		_arr.push(arr1[i]);
	}
	var _dup;
	for (var i = 0; i < arr2.length; i++){
		_dup = false;
		for (var _i = 0; _i < arr1.length; _i++){
			if (arr2[i].Equal(arr1[_i])){
				_dup = true;
				break;
			}
		}
		if (!_dup){
			_arr.push(arr2[i]);
		}
	}
	
	return _arr;
} 

//注意: 序列化的对象不能包含循环引用的情况, 否则会出现无限递归的情况, 导致浏览器假死
其他:ARR3=ARR1.concat(ARR2); //即可得到所需 <script language="JavaScript"> 
  <!-- 
//去掉数组 重复的项 
  Array.prototype.unique = function() 
  { 
    var a = {}; 
     for(var i=0; i<this.length; i++) 
    { 
      if(typeof a[this[i]] == "undefined") 
        a[this[i]] = 1; 
    } 
    this.length = 0; 
    for(var i in a) 
      this[this.length] = i; 
    return this; 
  }
var ARR1=[[1],[2],[3],[4]];
var ARR2=[[3],[4],[5],[6]];
var ARR3=ARR1.concat(ARR2);
ARR3=ARR3.unique(); 
alert(ARR3);
 //--> 
  </script> 

把这些代码丢到你网页他就会出现你要的。 

上一个:如何用JS 获取本地文件夹的文件列表
下一个:求实现自动生成图片缩略图的JS代码

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,