2016-08-01 8 views
2

私はいくつかのプロパティを共有する2つのjavascriptオブジェクトを持っています。私は私のユーザーにフィルタのセットを返すためにテンプレートとしてobject1を使用したいjavacriptオブジェクトの共有プロパティを置き換えます

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
//replace shared properties here 
//maybe using object.hasOwnProperty??? 
return object1; 
//desired output: {"prop1":"a", "prop2": "d", "prop3":"c"}; 

は、しかし、フィルタが変更される可能性があり、そしてそれらの変更はOBJECT2に保存されます。私はオブジェクト2のそれらと両方のオブジェクトに存在する場合のみ、object1のプロパティを更新しようとしています。この例では、たとえば、デフォルト値のprop1prop3を使用し、object2の値をprop2とし、prop4prop5を無視したいとします。 彼らはobject2はしている場合、私は簡単にオブジェクト1のプロパティをループし、確認できますが、私はこのような

答えて

2

何かをこの(union()またはintersection()に似)を行うための簡単な方法がなければならないように感じますか?それを行うには

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"} 
 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"} 
 

 
function mergeCommon (a, b) { 
 
    return Object.keys(a).reduce((obj, prop) => { 
 
    if (prop in b) obj[prop] = b[prop] 
 
    return obj 
 
    }, a) 
 
} 
 

 
console.log(mergeCommon(object1, object2))

1

一つの方法は、次のようになります。

const object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
 
const object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
 
for (const key in object1) { 
 
    if (object1.hasOwnProperty(key) && object2.hasOwnProperty(key)) { 
 
    object1[key] = object2[key]; 
 
    } 
 
} 
 
console.log(object1);

+0

私はよくやっただけで1秒 – Tyrsius

+0

@Tyrsiusであなたを倒します。私はあなたの答えがもっと "近代的"であると考えられるだろうと思う。 – mash

2

あなたはobject1のキーに反復すると値を使用して、出力を構築することができますそれらが存在する場合はobject2です。

var object1 = {"prop1":"a", "prop2": "b", "prop3":"c"}; 
 
var object2 = {"prop2":"d", "prop4": "e", "prop5":"f"}; 
 

 
var output = {}; 
 

 
Object.keys(object1).forEach(function(k) { 
 
    output[k] = (object2[k] === undefined ? object1 : object2)[k]; 
 
}); 
 

 
console.log(output);

+0

'object2.prop2'が偽であれば、' object1.prop2'に伝播しません。 ( 'var object2 = {"prop2":0、 "prop4": "e"、 "prop5": "f"}; ' –

+0

@RickHitchcockありがとうございました! – Arnauld