繁体   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