2016-11-17 185 views
0

我正在研究一個小API,我想嘗試使用HTTP PATCH REQUEST來更新數據,而不使用一堆if語句。我試圖用變化的數據填充傳出的數據對象。當屬性不​​爲空時將屬性添加到對象

update() { 
    let prop1 = hasBeenChanged.prop1 ? changedData.prop1 : null; 
    // ... 
    let propN = hasBeenChanged.propN ? changedData.propN : null; 

    let data: IPatchProfile = { 
     // something like --> property != null ? property: property.value : nothing 
    } 
} 

有什麼辦法可以動態地創建數據對象嗎?

回答

1

你可以使用Object.assign

let data = Object.assign({}, 
    first === null ? null || {first}, 
    ... 
); 

這工作,因爲Object.assign將跳過null參數。

如果您確信該屬性值不會是「falsy」,那麼這將是有點短寫:

let data = Object.assign({}, 
    first && {first}, 
    ... 
); 

假設對象會在某個時候被字符串化,因爲串化忽略未定義的值,您也可以嘗試

let data = { 
    first: first === null ? undefined : first, 
    ... 
} 
+0

謝謝。我現在明白了。我忘記說我正在使用打字稿,我認爲它會很相似,但是當我編譯到ES5時,在打字稿的ObjectConstructor中沒有Object.assign功能。我用關於串化數據的小技巧做了它。當我將數據設置爲undefined而不是null時,它們並未被串化,這非常簡單!謝謝! –