Javascript Array.prototype.filter()不';由于引号不同,无法处理对象数组

Javascript Array.prototype.filter()不';由于引号不同,无法处理对象数组,javascript,mongodb,express,mongoose,Javascript,Mongodb,Express,Mongoose,我使用的是express和mongoose,我想过滤来自数据库的数组。数据库中的对象的格式与我请求中的对象不同。我相信这就是为什么它没有像它应该的那样过滤。我该如何解决这个问题 router.post("/deleteTask", auth, async (req, res) => { try { const user = await User.findById(req.user); console.log(req.body.task); c

我使用的是express和mongoose,我想过滤来自数据库的数组。数据库中的对象的格式与我请求中的对象不同。我相信这就是为什么它没有像它应该的那样过滤。我该如何解决这个问题

router.post("/deleteTask", auth, async (req, res) => {
  try {
    const user = await User.findById(req.user);
    console.log(req.body.task);
    console.log(user.tasks.filter(task => task !== req.body.task));
    await User.updateOne(
      { _id: req.user },
      { tasks: user.tasks.filter(task => task !== req.body.task) },
      { upsert: true }
    );
    res.json(true);
  } catch (error) {
    res.json({
      message: error.message
    });
  }
});
first console.log日志
{title:'test888',description:'}


second console.log日志
。。。{“title”:“test888”,“description”:“}…
您正在比较两个对象。除非对象相同,否则将始终返回
false

有关更多详细信息,请查看以下内容:

在您的情况下,解决问题的一个快速方法是比较筛选函数中的标题:


task=>task.title!==您正在比较两个对象。除非对象相同,否则将始终返回
false

有关更多详细信息,请查看以下内容:

在您的情况下,解决问题的一个快速方法是比较筛选函数中的标题:


task=>task.title!==请求.正文.任务.标题

引号没有任何意义。。。但是看起来你正在尝试检查两个永远不会成为真的对象引号毫无意义。。。但看起来您正在尝试检查两个永远不会成为真实的对象。最好使用id。如果可用。是的,如果可用,id将是理想的,因为标题可能会重复。谢谢!我已经实现了ids,现在使用ids来删除东西。然而,由于某种原因,当我在Redux reducer中使用相同的代码时,它工作正常。为什么会这样?更好的使用应该是id。如果可以的话。是的,id是理想的,如果可以的话,因为标题可能会重复。谢谢!我已经实现了ids,现在使用ids来删除东西。然而,由于某种原因,当我在Redux reducer中使用相同的代码时,它工作正常。为什么呢?