在特定位置覆盖元素
Overwrite an element at a specific position
我有一个列表,这个列表应该删除旧元素,但只删除 ID 也匹配的元素。做这个的最好方式是什么。到目前为止,我唯一要做的就是删除该元素。但是有没有更好的选择来覆盖项目而不是删除它?
重要的是元素应该留在同一个地方。
这是我的清单
const [days, setDays] = useState(
[
{
id: 1,
day: 'Monday'
},
{
id: 2,
day: 'Sunday'
}
])
这是我的参数
const day = 'Friday'
const id = 2
以及预期的输出
[
{
id: 1,
day: 'Monday'
},
{
id: 2,
day: 'Friday'
}
]
我试过的
const newDay = {
id: id,
day: day
};
setDays((days) => [
...days.map((day) =>
day.id=== id ? newDay: day
),
]);
我用下面的代码解决了你的问题:
let result = days.map(item => (item.id === newday.id ? newday : item));
查看我的 Stackblitz 以获得完整示例:https://stackblitz.com/edit/web-platform-5r74df?file=script.js
我有一个列表,这个列表应该删除旧元素,但只删除 ID 也匹配的元素。做这个的最好方式是什么。到目前为止,我唯一要做的就是删除该元素。但是有没有更好的选择来覆盖项目而不是删除它?
重要的是元素应该留在同一个地方。
这是我的清单
const [days, setDays] = useState(
[
{
id: 1,
day: 'Monday'
},
{
id: 2,
day: 'Sunday'
}
])
这是我的参数
const day = 'Friday'
const id = 2
以及预期的输出
[
{
id: 1,
day: 'Monday'
},
{
id: 2,
day: 'Friday'
}
]
我试过的
const newDay = {
id: id,
day: day
};
setDays((days) => [
...days.map((day) =>
day.id=== id ? newDay: day
),
]);
我用下面的代码解决了你的问题:
let result = days.map(item => (item.id === newday.id ? newday : item));
查看我的 Stackblitz 以获得完整示例:https://stackblitz.com/edit/web-platform-5r74df?file=script.js