如何在javascript中合并这两种类型的json
输入中的第一个JSON如何在javascript中合并这两种类型的json,javascript,json,Javascript,Json,输入中的第一个JSON var obj1 = [{ "name":"manu", "age":23, "occupation":"SE" }, { "name":"test", "age":22, "occupation":"TE"
var obj1 = [{
"name":"manu",
"age":23,
"occupation":"SE"
},
{
"name":"test",
"age":22,
"occupation":"TE"
}
];
var obj2 = [{
"age":23,
"name":"manu",
"gender":"male"
},
{
"age":22,
"name":"test",
"gender":"male"
}
];
- 输入中的第二个JSON
var obj1 = [{ "name":"manu", "age":23, "occupation":"SE" }, { "name":"test", "age":22, "occupation":"TE" } ];
var obj2 = [{ "age":23, "name":"manu", "gender":"male" }, { "age":22, "name":"test", "gender":"male" } ];
- 合并后需要生成JSON
var result = [{ "name":"manu", "age":23, "occupation":"SE", "gender":"male" }, { "name":"test", "age":22, "occupation":"TE", "gender":"male" } ];
- 请参见JSON中键的排列
- 它们在对象中的顺序(年龄和姓名)键不同
您可以使用一个特殊的回调函数将数组合并到一个新的
结果
,并使用匹配的键
和所有其他属性
函数合并到(目标,键){
var ref=Object.create(空);
返回函数(o){
如果(!ref[o[key]])){
ref[o[key]]={};
推送(参考[o[键]);
}
Object.keys(o).forEach(函数(k){
参考[o[键][k]=o[k];
});
};
}
var obj1=[{“姓名”:“manu”,“年龄”:23,“职业”:“SE”},{“姓名”:“测试”,“年龄”:22,“职业”:“TE”}],
obj2=[{“年龄”:23,“姓名”:“手工”,“性别”:“男性”},{“年龄”:22,“姓名”:“测试”,“性别”:“男性”}],
结果=[],
merge=mergeTo(结果“名称”);
obj1.forEach(合并);
obj2.forEach(合并);
控制台日志(结果)代码>您有两个数组,其中数组中的每个索引都是一个对象。
如果数组索引在一起,如您的示例中所示,则只需循环并分配
var length = obj1.length;
for( var idx = 0; idx < length; idx++ )
{
var tmpObj = obj2[ idx ];
Object.keys(tmpObj).forEach(function(key,index)
{
// key: the name of the object key
// index: the ordinal position of the key within the object
// create new object property based upon the variable key
// and assign it the corresponding value from obj2
obj1[ idx ][ key ] = tmpObj.key;
});
}
var length=obj1.length;
对于(var idx=0;idx
问题是什么?还有,为什么要关心键的序列呢?在Javascript中,对象没有顺序。对于合并,请参见.Hashes键顺序是实现定义的,因此您实际上无法对它们的顺序做任何更改:(我使用的是Object.assign(merged,obj1,obj2),但在合并之前它不会在数组上工作循环。