Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/452.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中合并这两种类型的json_Javascript_Json - Fatal编程技术网

如何在javascript中合并这两种类型的json

如何在javascript中合并这两种类型的json,javascript,json,Javascript,Json,输入中的第一个JSON var obj1 = [{ "name":"manu", "age":23, "occupation":"SE" }, { "name":"test", "age":22, "occupation":"TE"

输入中的第一个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 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),但在合并之前它不会在数组上工作循环。