Javascript 如何将两个或多个对象的内容合并到第一个对象中

Javascript 如何将两个或多个对象的内容合并到第一个对象中,javascript,jquery,object,Javascript,Jquery,Object,您好,我正在尝试将一个对象修改为另一个对象的值 这是我需要修改的: y = {name:'m' , age:'28' , g:{m:'n' , f:'y' , k:'n' , other :{x:'f' , y:'m'}} , h:'6' , zip :'12345' } ; 以下对象将在objecty中循环,如果找到任何匹配的元素,它将更改其值以匹配objectx ​x = {name :'y' , age:'17' , g :{m:'y' ,f:'n'}} ; 代

您好,我正在尝试将一个
对象
修改为另一个
对象的值

这是我需要修改的:

  y = {name:'m' , age:'28' , g:{m:'n' , f:'y' , k:'n' ,
       other :{x:'f' , y:'m'}} , h:'6' , zip :'12345' } ;
以下对象将在
object
y
中循环,如果找到任何匹配的元素,它将更改其值以匹配object
x

   ​x = {name :'y' , age:'17' , g :{m:'y' ,f:'n'}} ;
代码

  for(var i in x){
     for(var o in y){
        if(i == o) y[o] = x[i] ; 
            }
      }
当这个代码运行时,它改变
y.(姓名和年龄)
的值,它保持
h和zip的值不变,这很好

问题位于
g
object,它只更改
g.n
g.f
的值,并删除
g object元素的其余部分

jsFiddle

  for(var i in x){
     for(var o in y){
        if(i == o) y[o] = x[i] ; 
            }
      }
我希望得到的是

  y = {name:'y' , age:'17' , g:{m:'y' , f:'n' , k:'n' ,
   other :{x:'f' , y:'m'}} , h:'6' , zip :'12345' } 
我使用的是jquery,因此,如果有任何jquery函数可以帮助实现这一点,您可以使用
deep
参数:

将两个或多个对象的内容合并到第一个对象中 反对

[……]

默认情况下,$.extend()执行的合并不是递归的;如果 第一个对象的属性本身就是一个对象或数组,它将 被第二个中具有相同键的属性完全覆盖 对象这些值不会合并。[…]但是,通过将true传递给 在第一个函数参数中,对象将被递归合并。 (不支持为第一个参数传递false。)


|我使用的是jquery,所以如果有任何jquery函数可以帮助我,那就好了

看一看


结果与预期一样,因为您正在循环和比较
x
y
的属性,如果值不相等,您将用
x
中的属性值替换
y
中的属性值

在这种情况下,
y.g==x.g
为false,因为存在不同的对象 因此,y.g将被x.g.取代

试试这个:

function compare(x, y) {

    for (var i in x) {
        for (var o in y) {
            if(typeof i == "object")
            {
                compare(i,o);
            }else{
                if (i == o) y[o] = x[i];
            }
        }
    }
}

compare(x,y);

你好,布鲁夫,很好的回答了你的问题,现在阅读问题!递归。你能用jQuery吗?@SalmanA是的,我说我能用jQuery。。。谢谢谢谢,这真是太神奇了。。。但是如果你们能向我们解释为什么上面的代码不起作用,这将是非常棒的,因为你们的代码只提供了属性的一级副本;例如,
y.g
属性被
x.g
完全覆盖。如果您想自己对解决方案进行编码,则必须检查所分配属性的值是否为对象(
typeof x[i]=“object”
);如果是,请将
x[i]
的属性逐个复制到
y[o]
中。当然,如果
x[i],那么您将不得不担心。someProp
它本身是一个对象吗:)这个想法是正确的,但是代码需要改进:在y中不存在的x的属性应该按原样复制到y。
function compare(x, y) {

    for (var i in x) {
        for (var o in y) {
            if(typeof i == "object")
            {
                compare(i,o);
            }else{
                if (i == o) y[o] = x[i];
            }
        }
    }
}

compare(x,y);