Javascript 如何比较完整的JSON并将其绑定到另一个JSON
我有一个JSON,如下所示:-Javascript 如何比较完整的JSON并将其绑定到另一个JSON,javascript,json,Javascript,Json,我有一个JSON,如下所示:- { "property" : value, "property" : value, "subProperty" : { "subProperty1" : { "subProperty1a" : { "property" : value, "property" : value }, "subP
{
"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;i console.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);
虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接供参考。如果链接页面发生更改,仅链接的答案可能会无效。虽然此链接可以回答问题,但最好在此处包含答案的基本部分,并提供链接以供参考。如果链接页面发生更改,仅链接的答案可能无效。可能重复的可能重复的