[英]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 還是新手,但我認為我應該使用foreach
和filter
,但不知道如何相互使用。 任何指導將不勝感激!
直接訪問財產就足夠了。 使用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.