在javascript中从数组中删除一个对象

我试图从art_id中删除购物车中的对象,但是当我得到这个错误SyntaxError: Delete of an unqualified identifier in strict mode. 为什么会发生这种情况,如何修改我的代码来解决这个错误

  function remove_from_cart(req, res, next) { console.log(req.session); var art_id = req.params._id; var art_to_remove = _.findWhere(req.session.cart, { art_id: art_id }); console.log(art_to_remove); delete art_to_remove; console.log(req.session); res.send('deleted') } 

由于您似乎在使用underscore ,因此可以使用_.reject()

 req.session.cart = _.reject(req.session.cart, { art_id: art_id }); 

我得到这个错误SyntaxError:在严格模式下删除一个不合格的标识符。

根据规格

在严格模式代码中发生删除操作时,如果其UnaryExpression是对variables,函数参数或函数名称的直接引用,则会抛出SyntaxErrorexception

您需要使用splice来删除数组中的值, 而不是删除指向已过滤值的variables (不允许)。

或者使用下划线 ,也可以使用_findWhere获取获取值的索引

 var b = _.indexOf(req.session.cart, art_to_remove ); req.session.cart.splice(b,1); 

一个简单的JS实现可能是一样的

  req.session.cart = req.session.cart.filter(function(cart){ return cart.art_id != art_id; }) 

而不是使用删除,你必须使用Array.prototype.splice所以你的代码应该是这样的:

  function remove_from_cart(req, res, next) { console.log(req.session); var art_id = req.params._id; var art_to_remove = _.findWhere(req.session.cart, { art_id: art_id }); console.log(art_to_remove); req.session.cart.splice(req.session.cart.indexOf(art_to_remove), 1); console.log(req.session); res.send('deleted') } 

我期待着req.session.cart是一个非空的数组对象,req.params._id不是空的

 function remove_from_cart(req, res, next) { var cart = req.session.cart; var art_id = req.params._id; var pos = cart.map(function(x) {return x.id; }).indexOf(art_id); var art_to_remove = cart[pos]; cart.splice(pos, 1); console.log(art_to_remove); console.log(cart); res.send('deleted') } 

以下示例工作:

 (function() { 'use strict'; var foo = [{x:1}, {y:2}, {z:3}]; alert(delete foo[0]); }()); 

我们不能直接从数组中删除对象。看看这个答案..
如何从JavaScript数组中删除对象?