簡體   English   中英

將更新的值傳播到對象中會刪除未修改的屬性

[英]Spreading updated values into an object deletes a property that's not being modified

我正在Redux上開發一個reducer,當嘗試通過將以前的對象和已更新的對象都散布到一個新對象中來更新對象時,會刪除未更新的屬性。

代碼將更好地解釋它:

上一個對象:

previousObj: {
    name: 'Foo',
    category: 'Bar',
    projects: [{...}, {...}]
}

更新對象:

updateObj: {
    name: 'Not Foo',
    category: 'Not Bar'
}

然后將兩者傳播到一個新的:

return {
    ...previousObj,
    ...updateObj
}

結果與updateObj相同,這意味着其中包含更多對象的“ projects”屬性已消失。 以我的理解,當將兩個對象散布到一個新對象中時,如果后一個屬性共享相同的名稱,則后一個屬性將覆蓋前一個屬性,但未更改的屬性應保持不變。

我在這里想念什么嗎?

為了清楚起見,下面是實際代碼的快照:

實際代碼

第12行中的日志具有與previousObj完全相同的形狀,第13行中的日志具有與updateObj相同的形狀,為簡單起見,僅更改了實際值。 結果是更新后我無法再訪問“項目”。

任何想法將不勝感激!

我認為您的代碼將以如下形式結束:

我能想到的是,正確創建了您的spread object ,您是否嘗試過將該對象分配給變量然后返回? 目的是要檢查是否創建了正確的鍵/值。

 const previousObj = { name: 'Foo', category: 'Bar', projects: [{ t: 'test1' }, { t: 'test2' }] } const updatedObj = { name: 'not Foo', category: 'not Bar' } const newObj = { ...previousObj, ...updatedObj } console.log(newObj) 

另外,我可以假設您的updatedObj已損壞,因此您的傳播對象有問題,請檢查updatedObj沒有為projects密鑰分配某些內容,如下例所示。

 const previousObj = { name: 'Foo', category: 'Bar', projects: [{ t: 'test1' }, { t: 'test2' }] } const updatedObj = { name: 'not Foo', category: 'not Bar', projects: undefined } const newObj = { ...previousObj, ...updatedObj } console.log(newObj) 

最后一個是在您返回散布對象(將完成)之后的某個位置,您正在刪除或覆蓋鍵。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM