在打字稿中连接两个对象[重复]

Posted

技术标签:

【中文标题】在打字稿中连接两个对象[重复]【英文标题】:Concat two objects in typescript [duplicate] 【发布时间】:2018-01-26 02:15:56 【问题描述】:

我有两个属性相同但值不同的对象

示例:

export class obj1
  arr1: values[]
  dic1:  [key: string]: Value; ;
  bool1: boolean

export class obj2
  arr1: values[]
  dic1:  [key: string]: Value; ;
  bool1: boolean

如果对象的属性是数组或字典,我希望将 obj2 值添加到 obj1 的值中。哪里有 boolean\string\number 属性我希望 obj2 属性替换 obj1

有没有一种简洁的方法可以在几行内完成,或者我必须映射每个属性。

【问题讨论】:

如果它的数组试试这个。 var newobj = Object.assign(obj1, obj2); 您可以使用 lodash _.mergeWith 并传递您的函数。看到这个:jsbin.com/xugujon/edit?html,js Deckerz 不幸的是,它替换了所有具有相同名称的属性,它不会添加到数组和字典中 你应该举一个真实的例子(这就是例子的用途)。您的示例包含语法错误。并告诉我们您期望的结果。我不确定您是否想要/需要递归函数。如果我看到一个例子,我会的。 【参考方案1】:

我问了一个类似的问题here。

基本上:

由于您的两个类具有相同的属性,您可以让它们扩展同一个类。然后,您可以为类本身编写一个名为“merge()”的方法,或者手动映射属性的方法,实际上看起来并不那么复杂。

编辑:

与此类似,但您的用例可能仍需要单独的类。 编辑:为合并字典添加了逻辑。

export class obj 
  arr1: values[]
  dic1:  [key: string]: Value; ;
  bool1: boolean


  merge(otherObj : obj) 
    let newObj:obj;
    newObj.arr1 = this.arr1.concat(otherObj.arr1);
    newObj.dic1 = ;
    newObj.dic1 = Object.assign(newObj.dic1, this.dic1);
    newObj.dic1 = Object.assign(newObj.dic1, otherObj.dic1);
    newObj.bool1 = this.otherObj.bool1;
    return newObj;
  

见:

How can I merge properties of two javascript objects dynamically?

【讨论】:

这不是 newObj.dic1 = this.otherObj.dic1;用 otherObj.dic1 替换 newObj.dic1?您将如何添加到第一本字典中 @RichardWatts 是的,这就是我从你的问题中不明白的地方,你有一个你希望如何合并这两个字典的例子吗?我猜您希望所有键/值对都放入一个字典中,但是如果两个对象上的键相同怎么办? 好点mintychai。这两个字典永远不会有相同的键。我确实希望将键\值对全部放入一个字典中 @RichardWatts 合并字典非常简单:***.com/questions/171251/… 已添加到答案中! 据我所知,该帖子中的解决方案将覆盖属性匹配的值。我想合并,所以我维护所有值

以上是关于在打字稿中连接两个对象[重复]的主要内容,如果未能解决你的问题,请参考以下文章

字符串枚举类似于打字稿中的类型[重复]

在打字稿中检查 NAN [重复]

在打字稿中键入注释[重复]

如何在打字稿中使用可选参数调用类构造函数[重复]

打字稿中的剂量[索引:字符串]是啥意思[重复]

在打字稿中查找3个数组中的共同元素[重复]