在特定位置覆盖元素

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