合并两个具有公共数组但包含不同值的javascript对象

合并两个具有公共数组但包含不同值的javascript对象,javascript,object,Javascript,Object,结果必须是: var state1 = { "up":{"name":"Uttar Pradesh","district":{"saharanpur":{"name":"Saharanpur","tehsil":{"behat":{"name":"Behat","village":["Alliwala"]}}}}} }; var state2 = { "up":{"name":"Uttar Pradesh","district":{"saharanpur":{"name":"Saharanpu

结果必须是:

var state1 = {
"up":{"name":"Uttar Pradesh","district":{"saharanpur":{"name":"Saharanpur","tehsil":{"behat":{"name":"Behat","village":["Alliwala"]}}}}}
};

var state2 = {
"up":{"name":"Uttar Pradesh","district":{"saharanpur":{"name":"Saharanpur","tehsil":{"behat":{"name":"Behat","village":["sachin"]}}}}}
};

在这个场景中,我不知道state1对象的内容,如果object1具有与object2相同的键,那么它应该只将state2的数组值推送到state1数组中

result = {
"up":{"name":"Uttar Pradesh","district":{"saharanpur":{"name":"Saharanpur","tehsil":{"behat":{"name":"Behat","village":["Alliwala","sachin"]}}}}}
};
var finalState=combineArrays(state2,state1);
功能组合阵列(阵列1、阵列2){
var finalArray=[];
对于(变量i=0,len=array1.length;i
您可以生成一个新对象,并使用已插入数组中的项附加数组

函数deepMerge(源、目标){
Object.keys(源).forEach(函数(k){
if(Array.isArray(源[k])){
if(!Array.isArray(目标[k])){
目标[k]=[];
}          
目标[k]=目标[k].concat(源[k]);
返回;
}
if(源[k]&&typeof源[k]=“对象”){
target[k]=target[k]|{};
深度合并(源[k],目标[k]);
返回;
}
目标[k]=源[k];
});
}
var state1={up:{name:“北方邦”,地区:{saharanpur:{name:“saharanpur”,乡:{behat:{name:“behat”,村庄:[“Alliwala”]}}}}},
州2={上:{名称:“北方邦”,地区:{撒哈拉胡尔:{名称:“撒哈拉胡尔”,乡:{比哈特:{名称:“比哈特”,村庄:[“萨钦”]}}}}}},
结果={};
deepMerge(state1,result);
deepMerge(state2,result);
控制台日志(结果)

.as控制台包装{max height:100%!important;top:0;}
问题是什么?我知道答案将涉及使用
JSON.parse()
,然后真正的问题是如何合并这两个对象,最后使用
JSON.stringify()
来显示结果。您尝试了什么?你需要知道的就是如何写一个循环和访问一个对象变量。实际上我需要合并两个对象State2和state1不是数组,它们是对象,所以我们不能在这里使用array.length,而且它给出了错误的结果
var finalState = combineArrays(state2,state1);


function combineArrays(array1,array2){
    var finalArray = [];
    for (var i = 0, len = array1.length; i < len; i++) {
      finalArray.push([array1[i][0], array2[i][0]]);
    }
    return finalArray;
}