2017-01-25 100 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 
 
}))

相關問題