
js对象数组属性合并的问题 20
展开全部
如果是普通数据类型, 非常简单
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;
}
//注意: 序列化的对象不能包含循环引用的情况, 否则会出现无限递归的情况, 导致浏览器假死
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;
}
//注意: 序列化的对象不能包含循环引用的情况, 否则会出现无限递归的情况, 导致浏览器假死
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询