我有一个问题与我的删除功能,它总是删除最后的数据,而不是所需的数据。
下面是我的API - DELETE函数:删除数据的函数
app.delete("/api/theTasks/:id", (req, res) => {
let taskToRemove = Items.find(p => p.id == parseInt(req.params.id));
let index = Items.indexOf(taskToRemove);
Items.splice(index, 1);
res.json(taskToRemove);
});
我的猜测是没有找到任务,index
最终是-1
,所以你最终调用:
Items.splice(-1, 1);
删除Items
的最后一个元素。
您可以通过检查项目是否被找到并仅在发现时删除它来解决此问题。
app.delete("/api/theTasks/:id", (req, res) => {
let taskToRemove = Items.find(p => p.id == parseInt(req.params.id));
if (taskToRemove) {
let index = Items.indexOf(taskToRemove);
Items.splice(index, 1);
res.json(taskToRemove);
} else {
res.status(404).json({ error: 'Item not found' });
}
});
get index = -1;接前要检查一下;或者使用过滤器
问题:
- find也返回
undefined
,如果没有找到项目。 - 当你搜索未定义的索引时它会返回
-1
- 如果你将
-1
传递给splice
,它将总是删除最后一个元素。
使用数组过滤器,
app.delete("/api/theTasks/:id", (req, res) => {
const result = Items.filter((p) => p.id === parseInt(req.params.id));
if (result.length === 0) res.status(404).json({ error: "Item not found" });
res.json(result);
});