2017-05-30 26 views
2

嘿,我有一噸的解決這個問題麻煩鍵名:需要從一個對象有出過寫現有對象擴展性到另一個如果他們共享

寫調用的函數「擴展」。

給定兩個對象,「extend」將第二個對象的屬性添加到第一個對象。

備註: *添加不在第一個對象中的任何鍵。 *如果第一個對象已經有一個給定的鍵,忽略它(不要覆蓋屬性值)。 *不要修改第二個對象。

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

extend(obj1, obj2); 

console.log(obj1); // --> {a: 1, b: 2, c: 3} 
console.log(obj2); // --> {b: 4, c: 3} 

到目前爲止,我有這樣的:

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

function extend(obj1, obj2) { 
    var keyz1 = Object.keys(obj1); 
    var keyz2 = Object.keys(obj2); 

    for (var i = 0; i < keyz2.length; i++){ 
    if (keyz1.indexOf(keyz2[i]) === -1) { 
     var searchKey = keyz2[i]; 
     for (searchKey in obj2) { 
     obj1[searchKey] = obj2[searchKey]; 
     } 
    } 
    } 
    return obj1; 
} 

我相信這是與我的實際

obj1[searchKey] = obj2[searchKey]; 

,但我有麻煩找出如何解決它。

+0

你覺得'什麼VAR searchKey = keyz2 [I]; for(searchKey in obj2){}'確實如此? –

回答

0

您只能使用一個鍵陣列,並使用in operator來檢查鍵是否已經在目標對象中。如果不指定source的值。

雖然Javascript使用對象的引用,但不需要返回目標對象。

function extend(target, source) { 
 
    var keys = Object.keys(source); 
 

 
    for (var i = 0; i < keys.length; i++) { 
 
     if (!(keys[i] in target)) { 
 
      target[keys[i]] = source[keys[i]]; 
 
     } 
 
    } 
 
} 
 

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

 
extend(obj1, obj2); 
 

 
console.log(obj1); 
 
console.log(obj2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

0

即使簡單:

function extend(target, source) { 
    for(var key in source) { 
    if(!target.hasOwnProperty(key)) { 
     target[key] = source[key]; 
    } 
    } 

    return target; 
} 
+0

語法錯誤在第三行,否則這個工作。你需要使用parans而不是方括號!target.hasOwnProperty(key) – paulp

+0

你是對的!固定。謝謝。 –

0
var searchKey = keyz2[i]; 
    for (searchKey in obj2) { 
    obj1[searchKey] = obj2[searchKey]; 
    } 

是觸摸不正確。它似乎在說「對於第二個對象中的每個鍵,都會覆蓋第一個對象」。相反,你可以說:「如果出現在第二個對象,關鍵是不是在第一個可用的,把它添加到第一個對象」

if (keyz1.indexOf(keyz2[i]) === -1) { 
    obj1[keyz2[i]] = obj2[keyz2[i]];   
} 

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

 
function extend(obj1, obj2) { 
 
    var keyz1 = Object.keys(obj1); 
 
    var keyz2 = Object.keys(obj2); 
 

 
    for (var i = 0; i < keyz2.length; i++) { 
 
    var searchKey = keyz2[i]; 
 
    if (keyz1.indexOf(searchKey) === -1) { 
 
     obj1[searchKey] = obj2[searchKey];   
 
    } 
 
    } 
 
    return obj1; 
 
} 
 

 
console.log(extend(obj1, obj2));

相關問題