javascript Lodash合并两个对象,但用新对象值替换相同的键值

inn6fuwd  于 2023-02-15  发布在  Java
关注(0)|答案(1)|浏览(226)

我有两个对象,它们有一些共同的键,但值不同,如下所示。

const object1 = { 
  name: 'John',
  age: 23,
  books: ['book1', 'book2']
};

const object2 = { 
  name: 'John',
  age: 23,
  books: ['book3'],
  city: 'London'
};

我需要如下所示的所需输出

object3 = { 
  name: 'John',
  age: 23,
  books: ['book3'],
  city: 'London'
};

当我使用lodash进行合并时,如下所示

object3 = _.merge(object1 , object2);

我得到的输出是

const object3 = { 
  name: 'John',
  age: 23,
  books: ['book1','book2','book3'],
  city: 'London'
};

如何用object2中的新数据替换books数组?

u1ehiz5o

u1ehiz5o1#

Lodash试图通过递归合并子对象来提供帮助
此方法类似于_. assign,不同之处在于它递归地将源对象的自身和继承的可枚举字符串键控属性合并到目标对象中。如果目标值存在,则跳过解析为undefined的源属性。***数组和普通对象属性递归地合并。***其他对象和值类型由赋值重写。源对象从左到右应用。后续源将覆盖先前源的特性指定。
https://lodash.com/docs/4.17.15#merge (emphasis mine)
如果不希望发生这种情况,请使用标准ES6 spread operator ...Object.assign

const object1 = { 
  name: 'John',
  age: 23,
  books: ['book1', 'book2']
};

const object2 = { 
  name: 'John',
  age: 23,
  books: ['book3'],
  city: 'London'
};

object3 = {...object1, ...object2};
object4 = Object.assign({}, object1, object2);

console.log(object3);
console.log(object4);
/* make the Stack Overflow console bigger */ .as-console-wrapper { max-height: 100vh !important; }

相关问题