根据匹配的req.params.id删除对象的ID

时间:2019-03-11 13:58:01

标签: node.js express

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相匹配。如果是这种情况,它应该删除该对象,然后在客户端返回一个更新的数组。

2 个答案:

答案 0 :(得分:0)

let cards = [{
    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',
}]

cards.forEach(element => {
    delete element.id
})

console.info(cards)

答案 1 :(得分:0)

我认为这是来自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.