Javascript 如何比较完整的JSON并将其绑定到另一个JSON

Javascript 如何比较完整的JSON并将其绑定到另一个JSON,javascript,json,Javascript,Json,我有一个JSON,如下所示:- { "property" : value, "property" : value, "subProperty" : { "subProperty1" : { "subProperty1a" : { "property" : value, "property" : value }, "subP

我有一个JSON,如下所示:-

{
    "property" : value,
    "property" : value,
    "subProperty" : {
        "subProperty1" : {
            "subProperty1a" : {
                "property" : value,
                "property" : value
            },
            "subProperty1b" : {
                "property" : ["1", "2"],
                "property" : value
            },
            .....
        },
        "subProperty2" : {
            "subProperty2a" : {
                "property" : value,
                "property" : value
            },
            "subProperty2b" : {
                "property" : value,
                "property" : value
            },
            .....
        },
        "subProperty3" : {
            "subProperty3a" : {
                "property" : value,
                "property" : value
            },
            "subProperty3b" : {
                "property" : value,
                "property" : value
            },
            .....
        }
    }
}
这个JSON可以在以后的任何位置添加任意数量的字段。我想要的是,当我添加新字段时,我想比较旧JSON和新JSON。如果缺少任何属性,请将该属性与新属性绑定

现在,我正在使用以下代码来实现这一点:-

    scope.tempObj = {};
    scope.findObjectByLabel = function(obj1, obj2, obj3){
                        for(var i in obj1)
                            {
                                obj3[i] = obj2[i];
                                if(obj2[i] == undefined)
                                {
                                    obj3[i] = obj1[i];
                                }
                                if(typeof(obj1[i]) == 'object')
                                {
                                    scope.findObjectByLabel(obj1[i], obj2[i],obj3[i]);
                                }
                            }
                            return obj3;        
                    }

scope.newJSON = scope.findObjectByLabel(scope.newJSON, scope.oldJSON ,scope.tempObj);

但是上面的代码只能通过一个级别进行比较。有谁能建议我对上面的代码进行改进,以便通过整个JSON进行比较。

也有同样的问题,lodash出手相救

看看merge&和deepequal(称为justequal)

用法示例:

  //**********//
 // _.merge //
//**********//
 var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};

var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }


  //**********//
 // _.equal //
//**********//
var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false

洛达斯也遇到了同样的问题,他前来救援

看看merge&和deepequal(称为justequal)

用法示例:

  //**********//
 // _.merge //
//**********//
 var object = {
  'a': [{ 'b': 2 }, { 'd': 4 }]
};

var other = {
  'a': [{ 'c': 3 }, { 'e': 5 }]
};

_.merge(object, other);
// => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] }


  //**********//
 // _.equal //
//**********//
var object = { 'a': 1 };
var other = { 'a': 1 };

_.isEqual(object, other);
// => true

object === other;
// => false
你可以用这个

函数合并深度(out){
out=out |{};
for(变量i=1,len=arguments.length;i
您可以使用这个

函数合并深度(out){
out=out |{};
for(变量i=1,len=arguments.length;iconsole.dir(合并);//{a:1,b:{c:{d:{e:12345}}}
要合并两个对象,请尝试以下操作

function merge(oldObj, newObj){
   for (var prop in newObj) {
     if(typeof newObj[prop] === 'object'){
            merge(oldObj[prop], newObj[prop]);     
     }

     if(typeof newObj[prop] !== 'object')
        oldObj[prop] = newObj[prop];
    }
    return oldObj
}

console.log(merge(oldObj, newObj, oldObjTemp));

在多个级别中查找缺少的属性和值

var oldObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": "United States"
     },
     "age": 62,
     "status": "Active"
};
var newObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "country": "United States"
     },
     "age": 62,
     "company": "Accenture"
};


var missingProps = {};

function getMissingProps(oldObj, newObj){
     for (var prop in oldObj) {
     if(newObj.hasOwnProperty(prop) && typeof oldObj[prop] === 'object')
       missingProps = getMissingProps(oldObj[prop], newObj[prop]);
     else if(!newObj.hasOwnProperty(prop))
         missingProps[prop] =  oldObj[prop] ;
   }

   return missingProps;
}

console.log(getMissingProps(oldObj, newObj));

如果您想要完整丢失的Json道具结构,请尝试以下方法

var oldObj = oldObjTemp = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": {"name" : "United States", "code":"US"}
     },
     "age": 62,
     "status": "Active"
};
var newObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "country": {"name" : "United States"}
     },
     "age": 62,
     "company": "Accenture"
};


var missingProps = {};

function getMissingProps(oldObj, newObj, oldObjTemp){
   for (var prop in oldObj) {
     if(newObj.hasOwnProperty(prop) && typeof oldObj[prop] === 'object'){
            getMissingProps(oldObj[prop], newObj[prop], oldObjTemp[prop]);     
     }
     else if(newObj.hasOwnProperty(prop)){
            delete oldObjTemp[prop];
     }
    }
}

getMissingProps(oldObj, newObj, oldObjTemp);

console.log(oldObjTemp);

要合并两个对象,请尝试以下操作

function merge(oldObj, newObj){
   for (var prop in newObj) {
     if(typeof newObj[prop] === 'object'){
            merge(oldObj[prop], newObj[prop]);     
     }

     if(typeof newObj[prop] !== 'object')
        oldObj[prop] = newObj[prop];
    }
    return oldObj
}

console.log(merge(oldObj, newObj, oldObjTemp));

在多个级别中查找缺少的属性和值

var oldObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": "United States"
     },
     "age": 62,
     "status": "Active"
};
var newObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "country": "United States"
     },
     "age": 62,
     "company": "Accenture"
};


var missingProps = {};

function getMissingProps(oldObj, newObj){
     for (var prop in oldObj) {
     if(newObj.hasOwnProperty(prop) && typeof oldObj[prop] === 'object')
       missingProps = getMissingProps(oldObj[prop], newObj[prop]);
     else if(!newObj.hasOwnProperty(prop))
         missingProps[prop] =  oldObj[prop] ;
   }

   return missingProps;
}

console.log(getMissingProps(oldObj, newObj));

如果您想要完整丢失的Json道具结构,请尝试以下方法

var oldObj = oldObjTemp = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "region": "CA",
         "country": {"name" : "United States", "code":"US"}
     },
     "age": 62,
     "status": "Active"
};
var newObj = {
     "name": "Bob Odenkirk",
     "title": "Software Engineer",
     "location": {
         "locality": "San Francisco",
         "country": {"name" : "United States"}
     },
     "age": 62,
     "company": "Accenture"
};


var missingProps = {};

function getMissingProps(oldObj, newObj, oldObjTemp){
   for (var prop in oldObj) {
     if(newObj.hasOwnProperty(prop) && typeof oldObj[prop] === 'object'){
            getMissingProps(oldObj[prop], newObj[prop], oldObjTemp[prop]);     
     }
     else if(newObj.hasOwnProperty(prop)){
            delete oldObjTemp[prop];
     }
    }
}

getMissingProps(oldObj, newObj, oldObjTemp);

console.log(oldObjTemp);

虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。可能重复的可能重复的