2013-03-08 32 views

回答

225

与在JavaScript中使用的方式相同。

delete myArray[key]; 

请注意,这将元素设置为undefined

最好使用Array.prototype.splice功能:

var index = myArray.indexOf(key, 0); 
if (index > -1) { 
    myArray.splice(index, 1); 
} 
+3

您可以添加一个类型! 'var index:number = myArray.indexOf(key,0);' – CorayThan 2015-12-19 00:38:26

+11

@CorayThan当然,它会被隐式地键入为'indexOf'返回一个'number'? – Chris 2016-06-08 10:27:02

+2

@Chris虽然在这种简单情况下很明显,但如果您明确定义每个变量的类型,它可以帮助您更快地诊断错误。您已经在不止一次的地方使用了'index',并且其中一个地方('splice')希望看到一个数字,否则您会得到一个错误。目前编译器不能阻止你在那里犯错误。 – 2016-11-02 09:56:35

42

如果数组对象的类型,那么最简单的方法是

let foo_object // Item to remove 
this.foo_objects = this.foo_objects.filter(obj => obj !== foo_object); 
+5

这不会删除任何简单的过滤条件。如果实际需要修改列表,这不是方法。 – user573434 2017-06-13 18:29:55

+1

@ user573434是的,你说得对,正如名字所示。但是,如果你想删除一个成功的删除api调用等对象的情况下,这是简单的方法。 – 2017-06-14 09:10:48

+0

这对我没有一个唯一的键属性的对象数组完美的作品。 @ user573434过滤器方法返回一个没有过滤对象的新数组,因此生成的数组确实已删除该对象。 – Jason 2017-06-25 03:22:11

3

这是我该解决方案:

onDelete(id: number) { 
    this.service.delete(id).then(() => { 
     let index = this.documents.findIndex(d => d.id === id); //find index in your array 
     this.documents.splice(index, 1);//remove element from array 
    }); 

    event.stopPropagation(); 
} 
4

使用ES6您可以使用此代码:

removeDocument(doc){ 
    this.documents.forEach((item, index) => { 
    if(item === doc) this.documents.splice(index,1); 
    }); 
} 
+0

最好的解决方案可以在不改变数组引用的情况下移除,并且可以实现特定的等式algorythm – Sid 2017-11-21 10:43:02

3

您可以使用数组上的splice方法删除元素。

例如,如果你有一个数组名为arr使用以下命令:

arr.splice(2,1); 

所以这里与指数2个元素是出发点和参数2将确定有多少元素被删除。

如果你想删除名为arr然后做这个数组的最后一个元素:

arr.splice(arr.length,1); 

这将返回ARR与删除最后一个元素。