【问题标题】:splice() method works but array does not change after executionsplice() 方法有效,但数组在执行后不会改变
【发布时间】:2018-04-26 00:17:42
【问题描述】:

我正在使用 express.js (node.js) 构建应用程序。我在 app.js 文件夹中有一个产品数组声明为会话(req.session.products)。 这是 POST 路线:

router.post('/remove-cart', (req, res, next) => {

    var product_id = req.body.product_id; //get product id from client

    console.log(req.session.products)

    var n = req.session.products.indexOf(product_id); //get position of product id in the array
    req.session.products.splice(n, 1); //remove it

    console.log(req.session.products)

});

当 n = 0 时,它会在路由结束时记录:

[ '1', '3', '3', '3', '3' ]
[ '3', '3', '3', '3' ]

这是我所期待的,但是,这不会影响主会话 (req.session.products) 并且不会“保存”它。为什么?

【问题讨论】:

  • req.session.products = req.session.products.splice(n, 1)怎么样
  • 再次将其分配给产品。
  • @Cedric Hadjian 您的代码在此代码块中运行良好我猜您的问题出在其他地方,因为您想删除索引为 0 的项目并将其删除

标签: javascript arrays node.js session express


【解决方案1】:

您真正的问题是您没有将req.session.products 数组返回到您的应用程序,您需要在响应中将其发回。

.post() 方法的末尾写下这一行:

res.send(req.session.products);

【讨论】:

  • @Shubham 这是一个错字,我试图写另一件事然后重构了这句话并错过了doesn't 部分。
  • 这仍然不会影响原始数组。我敢肯定它应该,但不知道为什么..
  • @CedricHadjian 数组中可能不存在product_id。将其包装在 if 语句中。
  • 确实如此!如果 req.body.product_id 为 1,则 n = 0(第一个元素)并且查询有效,但仍不影响原始数组
  • @CedricHadjian 很高兴它有帮助,是的,我首先误读了这个问题,答案已编辑。 :)
猜你喜欢
  • 2022-09-27
  • 1970-01-01
  • 2022-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-03
相关资源
最近更新 更多