簡體   English   中英

從JavaScript中的數組中刪除對象

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM