2017-01-25 63 views
1

我有两个对象obj1和obj2。如果obj2有一个obj1没有的键,那么obj2键/值对将被添加到obj1。如何从另一个对象添加属性,如果它不存在于JavaScript中的第一个对象中

例如:

obj1 = { 
 
a:1, 
 
b:2 
 
} 
 
obj2 = { 
 
b:4, 
 
c:3 
 
}

C:3将被投入OBJ1。

下面是我作为一个尝试,但我的大脑正在这个圈子里运行。我根本不能修改第二个对象(不需要),如果它也存在于obj2中,我必须将值保留在obj1中。

function extend(obj1, obj2) { 
 
    
 
    function comparison(obj1,obj2){ 
 
     var object1keys = Object.keys(obj1) 
 
     var object2keys = Object.keys(obj2) 
 
     var flag = 0 
 
     for(var i = 0; i<object2keys.length;i++){ 
 
      flag = 0 
 
      for(var j = 0; j<object1keys.length;j++){ 
 
       if(object2keys[i] === object1keys[j]){ 
 
        flag = 1 
 
        console.log(i,j) 
 
        break 
 
       } 
 
       if(flag = 0 && j == object1keys.length - 1){ 
 
        obj1[i] = obj2[j] 
 
       } 
 
      } 
 
     } 
 
     return obj1 
 
    } 
 
return obj1 
 
}
编辑:这是一个独特的问题,因为它看起来像其他问题没有涉及添加特定的键:值对不存在。

+1

的可能的复制[合并JS对象,而不会覆盖(http://stackoverflow.com/questions/7549574/merge-js-objects-without-overwriting) –

回答

4

使用Object.keys()Object.hasOwnProperty()功能简单的解决方案:

var obj1 = {a:1,b:2}, obj2 = {b:4,c:3}; 
 

 
Object.keys(obj2).forEach(function(k) { 
 
    if (!obj1.hasOwnProperty(k)) obj1[k] = obj2[k]; 
 
}); 
 

 
console.log(obj1);

+0

哇感谢你,比我想象的要简单得多。我当然在这个山丘上打了一座山 – Milos

+0

@MlowBunjay,不客气 – RomanPerekhrest

0

这应该工作。

function extend(obj1, obj2) { 
 
    Object.keys(obj2).forEach(function(key) { 
 
    obj1[key] = obj2[key]; 
 
    }) 
 
    return obj1; 
 
} 
 

 
console.log(extend({ 
 
    a: 1, 
 
    b: 2 
 
}, { 
 
    b: 3, 
 
    c: 4 
 
}))

相关问题