2017-08-17 136 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。這兩本字典永遠不會有相同的密鑰。我希望鍵/值對全部放入一個字典 –