在打字稿中concat两个对象

时间:2017-08-17 15:14:33

标签: javascript arrays typescript dictionary concat

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

实施例

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

是否有一种干净的方法可以在几行中完成此操作,或者我是否必须映射每个属性。

1 个答案:

答案 0 :(得分: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?