2017-02-06 7 views
0

2つのオブジェクトがある場合、「拡張」は2番目のオブジェクトのプロパティを1番目のオブジェクトに追加します。2つのオブジェクトを結合しますが、最初のオブジェクトに既にプロパティがある場合は、2番目のオブジェクトのプロパティは無視されます

注:

  • 第一のオブジェクトに含まれていない任意のキーを追加します。
  • 最初のオブジェクトに既に指定されたキーがある場合は、それを無視します(プロパティ値を上書きしないでください)。
  • 第2オブジェクトを変更しないでください。

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

は、私がこれまでにこれを取得することができた:

ログイン
function extend(obj1, obj2) { 
    for (var key in obj2) { 
    obj1[key] = obj2[key]; 
    } 
return obj1; 
} 

{a: 1, b: 4, c: 3} 

は私が渡されたためにこれを理解しようとしている私の頭蓋骨をクラッキングしてきました2日ほどかかります。試してグーグルとすべて。ありがとうございます。

+0

あなたは正確に何を試してみましたか?どこで立ち往生しましたか? –

+0

私はどれくらい私が得たかを示すために質問を編集しました。最初のオブジェクトにすでにbという名前のキーがある場合は、2番目のオブジェクトでb:4を省略する方法はわかりません。 –

答えて

0

基本的には、2番目のオブジェクトの各キーを繰り返して、最初のオブジェクトにそのキーがあるかどうかを確認するだけです。

ご存じのように、反復はfor..in loopを使用して行うことができます。存在しない部分は、オブジェクトがすでに特定のプロパティを持っているかどうかをチェックする方法です。それはhasOwnPropertyのためです。

function extend(obj1, obj2) { 
 
    // Iterate over every (enumerable) key in obj2 
 
    for (var key in obj2) { 
 
    // If obj1 does not have a key by this name, 
 
    // add it to obj1 
 
    if (!obj1.hasOwnProperty(key)) { 
 
     obj1[key] = obj2[key]; 
 
    } 
 
    } 
 
} 
 

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

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

+0

はい、うまくいきました!私はこれを以前に試したことを思い出したと思いますが、私は入力しました if(!obj1.hasOwnProperty [key])<---ブラケットが本当に私を怒らせました –

関連する問題