我有两个javascript对象,它们共享多个属性。
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"};
我想使用object1
作为模板向我的用户返回一组过滤器,但过滤器可能会更改,并且这些更改会保存到object2。我试图将object1中的属性与对象2中的属性一起更新,但前提是它们都存在于两个对象中。在此示例中,我想采用默认值prop1
和{ {1}},使用object2的prop3
值,忽略prop2
和prop4
。
我可以轻松遍历object1的属性并检查它们是否在object2中,但我觉得必须有一种更简单的方法(类似于prop5
或union()
)
答案 0 :(得分:2)
这样的东西?
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 :(得分: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);
答案 2 :(得分: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);