簡體   English   中英

Javascript - 使用來自相同 object 的另一個值更新 object 屬性

[英]Javascript - updating an object property with another value from the same object

我有以下 object:

{ id: 1, name: 'jdoe', currentDayHours: null, totalHours: [{ task: 'cleaning', hours: 10}, { task: 'reading', hours: 2 }]}

我正在嘗試創建一個 function,它將根據傳遞給 function 的任務參數更新currentDayHours 因此,例如,如果將“清潔”傳遞給 function,則 object 的預期結果應該是:

{ id: 1, name: 'jdoe', currentDayHours: 10, totalHours: [{ task: 'cleaning', hours: 10}, { task: 'reading', hours: 2 }]}

我對 javascript 還是新手,但我認為我應該使用foreachfilter ,但不知道如何相互使用。 任何指導將不勝感激!

直接訪問財產就足夠了。 使用Array.find查找 object。

 data = { id: 1, name: 'jdoe', currentDayHours: null, totalHours: [{ task: 'cleaning', hours: 10}, { task: 'reading', hours: 2 }]} const updateHours = (data,key) => { data.currentDayHours = (data.totalHours.find(({task})=>task===key)||[]).hours return data } console.log(updateHours(data,'cleaning'))

您可以使用Array.find()totalHours數組中查找任務 object,然后使用該對象的hours分配給currentDayHours

如果要就地修改 object ,可以這樣做:

function updateCurrentDayHours(obj, taskName) {
    const task = obj.totalHours.find(t => t.task === taskName)
    if (task) obj.currentDayHours = task.hours
}

如果您想返回一個克隆的 object,您可以使用一些庫(如 lodash)提供的 deepClone function。 在這里,為了簡單起見,我使用JSON.parse()JSON.stringify()

function updateCurrentDayHours(obj, taskName) {
    const task = obj.totalHours.find(t => t.task === taskName)
    if (task) {
        const clone = JSON.parse(JSON.stringify(obj))
        clone.currentDayHours = task.hours
        return clone
    }
}

暫無
暫無

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

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