首页 > 解决方案 > 必须根据匹配的 req.params.id 删除对象的 ID

问题描述

router.delete('/shopping-cart/:id', (req, res) => {
    let cart = new Cart(req.session.cart);
    console.log(req.params.id);
    console.log(cart.generateArray());
});

console.log 将输出以下结果(req.params.id):

5c863cc8ee0819f989acf9c3

console.log 将输出以下结果(cart.generateArray()):

[ { item: 
 { _id: '5c863cc8ee0819f989acf9c3',
   imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png',
   title: 'Gothic Video',
   description: 'Absolutely stunning',
   price: 10,
   __v: 0 },
image: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png',
qty: 1,
price: 10,
id: '5c863cc8ee0819f989acf9c3' } ]

那么如何循环遍历所有项目并检查 id 是否与 req.params.id 匹配。如果是这种情况,它应该删除该对象,然后在客户端返回一个更新的数组。

标签: node.jsexpress

解决方案


我假设那来自cart.generateArray()?

如果是这样,您可能应该在相关函数中执行此操作,但如果您不能,则只需将结果映射到一个新数组:

let result = cart.generateArray().map(item => {
  const {id, ...entry} = item;
  // if you want to also remove _id from the inner item, you can do the same
  return entry;
});
console.log(result); // will have entries w/o id in them. 

如果您还想删除嵌套item对象,这是 smae 方法,尽管我会更改一些单词以提高可读性。

let result = cart.generateArray().map(cartItem => {
  const {id, item, ...entry} = cartItem;
  // this will remove both the id and the item keys
  return entry;
});
console.log(result); // will have entries w/o id in them. 

推荐阅读