2017-08-17 71 views
1

我具有相同特性的两个对象,但保持不同的值的毗连两个打字稿对象

实施例:

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

当对象的属性是我想OBJ2值增加一个阵列或字典到obj1的值。哪里有布尔\字符串\数字属性我想要obj2属性来替换obj1

是否有干净的方式做到这一点在几行或我将不得不映射每个属性。

+1

试试这个可能。 'var newobj = Object.assign(obj1,obj2);' – Deckerz

+0

你可以使用lodash ['_.mergeWith'](https://lodash.com/docs/4.17.4#mergeWith)并传递你的函数。看到这个:http://jsbin.com/xugujon/edit?html,js –

+0

Deckerz不幸的是,用相同的名称替换所有的属性,它不会添加到数组和字典 –

回答

0

我问了类似的问题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?

+0

不会这个newObj.dic1 = this.otherObj.dic1;将newObj.dic1替换为其他Obj.dic1?你会如何添加到第一个字典 –

+0

@RichardWatts是啊,这是我不明白你的问题,你有你想如何合并这两个字典的例子吗?我猜你希望所有的键/值对都被放到一个字典中,但如果两个对象上的键是相同的呢? – mintychai

+0

好点mintychai。这两本字典永远不会有相同的密钥。我希望键/值对全部放入一个字典 –