gpt4 book ai didi

javascript - 过滤循环中的对象并设置新的状态

转载 作者:行者123 更新时间:2023-12-01 01:44:42 25 4
gpt4 key购买 nike

我有一组对象,在我的 react 状态下与此类似:

timers:
{
id:"-LL-YVYNC_BGirSn1Ydu"
title: "Project Title"
project: "Project Name",
elapsed: 0,
runningSince: 0,
},
{
id:"-LL-YVYNC_BGirSn1Ydu-2",
title: "Project Title 2"
project: "Project Name",
elapsed: 0,
runningSince: 0,
},
{
id:"-LL-YVYNC_BGirSn1Ydu-3",
title: "Project Title 3"
project: "Project Name 2",
elapsed: 0,
runningSince: 0,
}

有时我需要批量删除具有相同“项目”的“计时器”并更新没有它们的状态。我有一个像这样的数组:

items=["-LL-YVYNC_BGirSn1Ydu", "-LL-YVYNC_BGirSn1Ydu-2"]

包含我需要删除的项目的 ID。我正在使用这种方法来实现结果:

handleDeleteProject = (projectId)=>{
//Creates the array with the id of removing elements
let rObject = this.findTimers(projectId);
for (const key of Object.keys(rObject)){
tObject=[...this.state.timers];
tObject = tObject.filter(timer=>timer.id !== rObject[key]);
this.setState({
timers: tObject
})
}
}

问题是项目被过滤,但对于每个循环“tObject”都具有与起始项目相同的值,因此在循环结束时我有一个仅由数组中最后一个 id 过滤的对象。如何从状态中删除所有项目,无论是否有“过滤器”。谢谢。

最佳答案

let rObject = this.findTimers(projectId);
let values = Object.values(rObject);
let tObject = this.state.timers.filter(timer => values.indexOf(timer.id) === -1);
this.setState({
timers: tObject
});

只需一个过滤器就可以解决这个问题...values 包含所有需要避免的值

编辑:您还可以使用过滤器 (timer => !values.includes(timer.id)) 而不是 values.indexOf(...)...

关于javascript - 过滤循环中的对象并设置新的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058910/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com