替换javascript对象的共享属性

时间:2016-08-01 22:05:07

标签: javascript object

我有两个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值,忽略prop2prop4。 我可以轻松遍历object1的属性并检查它们是否在object2中,但我觉得必须有一种更简单的方法(类似于prop5union()

3 个答案:

答案 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);