在javascript中从数组中删除对象

时间:2016-05-09 10:00:31

标签: javascript node.js

我尝试使用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')
    }

6 个答案:

答案 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?