Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/440.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取具有不同值的对象_Javascript_Object_Diff - Fatal编程技术网

Javascript 获取具有不同值的对象

Javascript 获取具有不同值的对象,javascript,object,diff,Javascript,Object,Diff,我想从两个给定的对象A和B生成一个对象,其中B的值与A不同。我们可以假设A和B中都存在所有字段 示例:给定以下两个对象: A B 由于昵称和位置已更改,我希望结果是: { "nickname": "John-Boy", "location": { "latitude": 1.0, "longitude": 2.0 } } 请注意,我需要完整的位置对象,而不仅仅是更改的经度 实现这一目标的好方法是什么? var数组1={ “名字”:“约翰”

我想从两个给定的对象A和B生成一个对象,其中B的值与A不同。我们可以假设A和B中都存在所有字段

示例:给定以下两个对象:

A

B

由于昵称和位置已更改,我希望结果是:

{
    "nickname": "John-Boy",
    "location": {
        "latitude": 1.0,
        "longitude": 2.0
    }
}
请注意,我需要完整的
位置
对象,而不仅仅是更改的
经度

实现这一目标的好方法是什么?

var数组1={
“名字”:“约翰”,
“姓氏”:“能源部”,
“昵称”:“约翰尼”,
“地点”:{
“纬度”:1.0,
“经度”:1.0
},
“电子邮件”:“约翰。doe@company.com"
}
变量array2={
“名字”:“约翰”,
“姓氏”:“能源部”,
“昵称”:“约翰男孩”,
“地点”:{
“纬度”:1.0,
“经度”:2.0
},
“电子邮件”:“约翰。doe@company.com"
}
var-currentString;
var resultObject={};
函数loopOverObject(sourceObj、targetObj、innerObjName){
for(sourceObj中的var键){
currentString=null;
if(sourceObj.hasOwnProperty(键)){
if(源对象的类型[键]=“对象”){
loopOverObject(sourceObj[key],targetObj,key);
打破
}
否则{
if(sourceObj[key]!==targetObj[key]){
if(innerObjName){
if(resultObject[innerObjName]){
resultObject[innerObjName][key]=sourceObj[key];
}
否则{
resultObject[innerObjName]=JSON.parse('{'+key+':'+sourceObj[key]+'}');
}
}
否则{
currentString=sourceObj[key];
}
}
}
如果(当前字符串){
resultObject[key]=currentString;
}
}
}
返回结果对象;
};
var结果=loopOverObject(array2,array1);
var resultDiv=document.getElementById(“结果”)
resultDiv.innerHTML=JSON.stringify(结果)

您可以使用差分模块,如获取差分列表并使用它们适当地构建新对象:

var diff = odiff(A,B)
var result= {}
for(var n=0; n<diff.length; n++) {
  var key = diff.path[0] // the top-level key
  result[key] = B[key]
} 
var diff=odiff(A,B)
var result={}

对于(var n=0;nSee:和。请在发布之前搜索该网站。1.我搜索了。大约15分钟。2.请在得出结论之前阅读我的问题。我不想要差异。我想要B的子集。本质上是B减去a和B的共同值。也许我需要进一步澄清它?
{
    "nickname": "John-Boy",
    "location": {
        "latitude": 1.0,
        "longitude": 2.0
    }
}
var diff = odiff(A,B)
var result= {}
for(var n=0; n<diff.length; n++) {
  var key = diff.path[0] // the top-level key
  result[key] = B[key]
}