我尝试使用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')
}
答案 0 :(得分:5)
由于您似乎正在使用underscore
,因此您可以使用_.reject()
:
req.session.cart = _.reject(req.session.cart, { art_id: art_id });
答案 1 :(得分:1)
我收到此错误SyntaxError:删除不合格的 严格模式下的标识符。
根据spec
在严格模式代码中发生删除操作符时,出现SyntaxError 如果其UnaryExpression是对a的直接引用,则抛出异常 变量,函数参数或函数名称
您需要使用splice来删除数组中的值,而不是删除指向过滤值的变量(不允许)。
或使用下划线,您也可以使用_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;
})
答案 2 :(得分:0)
您必须使用Array.prototype.splice,而不是使用Delete,因此您的代码应如下所示:
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')
}
答案 3 :(得分:0)
以下示例有效:
(function() {
'use strict';
var foo = [{x:1}, {y:2}, {z:3}];
alert(delete foo[0]);
}());
虽然下面没有:
(function() {
'use strict';
var foo = [{x:1}, {y:2}, {z:3}];
var y = foo[0];
delete y;
}());
因此,对于delete
模式下的strict
,您应该使用array[index]
或object[property]
或object.property
等语法。引用它的变量不起作用。
此外,建议不要在数组上使用delete
,因为它不会更新数组的length
并导致数组中出现漏洞。使用splice
总是更好。
答案 4 :(得分:0)
我希望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')
}
答案 5 :(得分:0)
我们无法直接删除数组中的对象。看看这个答案。
How do I remove an object from an array with JavaScript?