从项目中删除数组中的项目?

时间:2016-07-14 14:29:12

标签: javascript node.js

req.user.hails[0]是类hails的一个实例,它有方法cancel() 我称之为:

req.user.hails[0].cancel()

我可以从该实例内部删除该项目吗?

    cancel: function() {
        //this will remove the item from a databae
        this.destroy()
        //Here I want to delete "this".
    }

期望的结果是req.user.hails.length比以前短一些。我知道我可以将它从我打电话取消的地方删除。

1 个答案:

答案 0 :(得分:0)

不可以,除非cancel关闭reqreq.userreq.user.hails,否则不会发生(不太可能)。 (即便如此,这将是一个非常狡猾的事情。)如果它没有提供给你的方法的信息,你可以用它来删除条目数组。

您可以向hails添加一个方法,即取消都会删除该条目:

req.user.hails.cancelEntry = function(index) {
    this[index].cancel();
    this.splice(index, 1);
};

是的,您确实可以将非索引属性添加到这样的数组中。请注意,它们是可枚举的,这是不使用for-in循环遍历数组的一个原因。 (更多关于在this question中循环数组及其答案。)

你可以使它不可枚举:

Object.defineProperty(req.user.hails, "cancelEntry", {
    value: function(index) {
        this[index].cancel();
        this.splice(index, 1);
    }
});

在ES2015 +中,您甚至可以创建Array的子类,其原型上有cancelEntry ...