2013-03-08 61 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與刪除最後一個元素。