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代码