Javascript 普通JS或Lodash-用其他对象的值替换对象值

Javascript 普通JS或Lodash-用其他对象的值替换对象值,javascript,ecmascript-6,lodash,Javascript,Ecmascript 6,Lodash,我有两个目标: let first = { a: 'John', b: 22, c: 'example' } let second = { b: 55, d: 'demo' } 我只想将第二个对象中已经存在的项替换为第一个对象。结果应如下所示(因此仅应更改b项,而忽略新的d项): 合并将不起作用,因为它还将添加新项。 我可以使用foreach,但我相信应该有一个简短的答案。我已经在我的项目中使用了lodash,所以我可以从中使用函数,但我找不到任何用于此目的的函

我有两个目标:

let first = {
   a: 'John',
   b: 22,
   c: 'example'
}

let second = {
   b: 55,
   d: 'demo'
}
我只想将第二个对象中已经存在的项替换为第一个对象。结果应如下所示(因此仅应更改b项,而忽略新的d项):

合并将不起作用,因为它还将添加新项。
我可以使用foreach,但我相信应该有一个简短的答案。我已经在我的项目中使用了lodash,所以我可以从中使用函数,但我找不到任何用于此目的的函数。是否有?

要更新

交叉口

属性的定义

基本上是这样的:

Object.keys(a).forEach(prop => if(b.hasOwnProperty(prop)) a[prop] = b[prop]))


可以在第二个数组中的键上使用循环。对于第一个中存在的任何键,覆盖该值

let first={
a:‘约翰’,
b:22,
c:‘举例’
}
让第二个={
b:55,
d:‘演示’
}
for(秒中的常数k){
if(k在第一位){
第一[k]=第二[k];
}
}

console.log(第一)如果使用ES6,则可以使用此选项

let merge = { ...first, ..._.pick(second, Object.keys(first)) }
let first={
a:‘约翰’,
b:22,
c:‘举例’
}
让第二个={
b:55,
d:‘演示’
}
Object.keys(第二个).forEach(函数(键,索引){
if(第一个hasOwnProperty(键)){
第一[键]=第二[键];
}
});
console.log(第一)具有Lodash两个功能和


使用lodash,您可以使用
.merge
.pick
.keys
执行类似操作:

let first={
a:‘约翰’,
b:22,
c:‘举例’
},秒={
b:55,
d:‘演示’
}
让result=u.merge(第一个,u.pick(第二个,u.keys(第一个)))
console.log(结果)
_.intersection(Object.keys(a), Object.keys(b)).forEach(prop => a[prop] = b[prop])
let merge = { ...first, ..._.pick(second, Object.keys(first)) }
var a = {
   a: 'John',
   b: 22,
   f:[11,22,2],
   d: {a:1,b:2,c:0},
   c: 'example'
}

var b = {
   b: 55,
   f:[3],
   d: {c:1,b:11},
}

function mergeObjects(a,b){
  let common = _.pick(b, Object.keys(a));
  return _.mergeWith(a, common, customizer)
}

function customizer(objValue, srcValue) {
  if (_.isArray(objValue)) {
    return objValue.concat(srcValue);
  }
  if(_.isObject(objValue)) {
      return mergeObjects(objValue,srcValue)
  }
}
mergeObjects(a,b)