[英]Deleting an object from a array in 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是對變量,函數參數或函數名稱的直接引用,則拋出SyntaxError異常
您需要使用拼接來刪除數組中的值, 而不是刪除指向已過濾值的變量 (不允許)。
或使用下划線 ,您也可以使用_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;
})
不必使用Delete,而必須使用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')
}
以下示例起作用:
(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; }());
因此,對於strict
模式下的delete
,您可能應該使用array[index]
或object[property]
或object.property
。 引用相同變量的變量不起作用。
另外,不建議delete
數組,因為它不會更新數組的length
,並導致數組中的空洞。 使用splice
總是更好。
我期望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')
}
我們不能直接從數組中刪除對象。請看這個答案。
如何使用JavaScript從數組中刪除對象?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.