2017-11-15 12 views
1

私はjavascriptプロジェクトで働いています。javascript:EcmaScript 6/immutable jsを使用して2つのオブジェクトを左マージ

2つ目のオブジェクトが1つ目のオブジェクトのフィールドをオーバービューし、2つ目のオブジェクトには新しいフィールドを追加しないため、2つのオブジェクトをマージするオプションを検索します。

ような何か:

const firstObj = {name:'jon', age:'6} 
const secondObj = {name:'nir', mark:'100%'} 

const mergedObj = leftMerge(firstObj, secondObj); 

だから私はmergedObjがなりたい:

{name:'nir', age:'6'} 

は、私は(私はECMAScriptの6とワール)JavaScriptで、または不変であることを行うにはどのような方法がありますです。 jsライブラリ?

答えて

2

反復firstObjキーを、そしてそれは、それらの性質を持っている場合firstObjから値をとらない場合、secondObjから値を取る:

const firstObj = {name:'jon', age:'6'} 
 
const secondObj = {name:'nir', mark:'100%'} 
 

 
const leftMerge = (a, b) => Object.keys(a).reduce((r, key) => (r[key] = (key in b ? b : a)[key], r), {}); 
 

 
const mergedObj = leftMerge(firstObj, secondObj); 
 

 
console.log(mergedObj);

+1

私は 'Object.assign'を落とし、'( 'horrible '(https://stackoverflow.com/q/12664230/1048572))' if'''' '' '' '' 'の文を作ることをお勧めします – Bergi

+0

@Bergi - より良いロジックをありがとう。 –

3

このためにそこ組み込みいない(Object.assignをマージすべてプロパティ)、実際には簡単に書くことができます:

function leftMerge(a, b) { 
    const res = {}; 
    for (const p in a) 
     res[p] = (p in b ? b : a)[p]; 
    return res; 
}