Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.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_Jquery_Object_Merge - Fatal编程技术网

如何合并两个嵌套的javascript对象?

如何合并两个嵌套的javascript对象?,javascript,jquery,object,merge,Javascript,Jquery,Object,Merge,我目前正在使用以下代码: function mergeFaculty(json){ tempList = $.extend(tempList, json); console.log(JSON.stringify(tempList)); } 但是,它不起作用 对象如下: {"modulos":{"id":"1","name":" Usuarios","paginas":{"id":"1","name":" Listado Usuarios","facultades":{"id":

我目前正在使用以下代码:

function mergeFaculty(json){
    tempList = $.extend(tempList, json);
    console.log(JSON.stringify(tempList));
}
但是,它不起作用

对象如下:

{"modulos":{"id":"1","name":" Usuarios","paginas":{"id":"1","name":" Listado Usuarios","facultades":{"id":"1","name":" ver"}}}}

{"modulos":{"id":"1","name":" Usuarios","paginas":{"id":"1","name":" Listado Usuarios","facultades":{"id":"2","name":" editar"}}}}

知道它为什么不起作用吗

尝试将扩展函数更改为:
$.extend(true,templast,json)
,它应该允许深度合并

尝试将扩展函数更改为:
$.extend(true,templast,json)
,它应该允许深度合并

首先,我认为您的对象结构有问题,因为您的
facultades
键是一个对象而不是数组。如果希望在扩展后同时保存两个
facultades
对象,则应使用数组

也就是说,它似乎是
$。extend
甚至覆盖了数组,这意味着它将选择作为此函数参数传递的最新对象的数组。因此,这对您不好,因为数组仍将保存
facultades
中的两个对象之一

要正确合并数组,我们可以使用
$.merge
函数,但这只适用于数组。因为您手头有一个JSON对象,所以这不起作用

因此,我所做的只是编写自己的递归代码来利用这两个特性:深度复制扩展函数和数组中的合并函数

希望这对实现您的目标有用(注释中的解释):

var templast={“modulos”:{“id”:“1”,“name”:“Usuarios”,“paginas”:{“id”:“1”,“name”:“Listado Usuarios”,“facultades”:[{“id”:“1”,“name”:“ver”}}}}
var secondObject={“modulos”:{“id”:“1”,“name”:“Usuarios”,“paginas”:{“id”:“1”,“name”:“Listado Usuarios”,“facultades”:[{“id”:“2”,“name”:“editar”}}}}
//深延递归函数
函数deepExtend(firstObject、secondObject、tempObject){
tempObject=typeof tempObject==“未定义”?{}:tempObject;
//展平多维数组
函数展平(数组){
if(array.length){
返回数组.reduce(函数(上、下){
返回上一个concat(当前)
})
}
}
//迭代两个对象,扩展和合并它们
函数迭代对象(object1、object2){
var keys=Object.keys(object1);
对于(变量i=0;i合并(第二对象)首先,我认为您的对象结构有问题,因为您的
facultades
键是一个对象而不是数组。如果希望在扩展后同时保存两个
facultades
对象,则应使用数组

也就是说,它似乎是
$。extend
甚至覆盖了数组,这意味着它将选择作为此函数参数传递的最新对象的数组。因此,这对您不好,因为数组仍将保存
facultades
中的两个对象之一

要正确合并数组,我们可以使用
$.merge
函数,但这只适用于数组。因为您手头有一个JSON对象,所以这不起作用

因此,我所做的只是编写自己的递归代码来利用这两个特性:深度复制扩展函数和数组中的合并函数

希望这对实现您的目标有用(注释中的解释):

var templast={“modulos”:{“id”:“1”,“name”:“Usuarios”,“paginas”:{“id”:“1”,“name”:“Listado Usuarios”,“facultades”:[{“id”:“1”,“name”:“ver”}}}}
var secondObject={“modulos”:{“id”:“1”,“name”:“Usuarios”,“paginas”:{“id”:“1”,“name”:“Listado Usuarios”,“facultades”:[{“id”:“2”,“name”:“editar”}}}}
//深延递归函数
函数deepExtend(firstObject、secondObject、tempObject){
tempObject=typeof tempObject==“未定义”?{}:tempObject;
//展平多维数组
函数展平(数组){
if(array.length){
返回数组.reduce(函数(上、下){
返回上一个concat(当前)
})
}
}
//迭代两个对象,扩展和合并它们
函数迭代对象(object1、object2){
var keys=Object.keys(object1);
对于(变量i=0;i