2013-03-08 66 views

Trả lời

225

Tương tự như cách bạn làm trong JavaScript.

delete myArray[key]; 

Lưu ý rằng điều này đặt thành phần là undefined.

Tốt hơn để sử dụng Array.prototype.splice chức năng:

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

Bạn có thể thêm loại đó! 'var index: number = myArray.indexOf (khóa, 0);' – CorayThan

+11

@CorayThan Chắc chắn nó sẽ được gõ hoàn toàn như 'indexOf' trả về một' số'? – Chris

+2

@Chris Trong khi rõ ràng trong trường hợp đơn giản này, nó có thể giúp bạn chẩn đoán lỗi nhanh hơn nếu bạn xác định loại cho mỗi biến một cách rõ ràng. Bạn đang sử dụng 'index' trong nhiều hơn một lần và một trong những nơi đó (' splice') muốn xem một số hoặc bạn sẽ gặp lỗi. Hiện tại trình biên dịch không thể ngăn bạn phạm sai lầm ở đó. –

42

Nếu mảng là loại đối tượng, thì cách đơn giản nhất là

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

Điều này không loại bỏ bất cứ điều gì nó chỉ đơn giản là bộ lọc. Nếu danh sách thực sự cần được sửa đổi thì đây không phải là cách. – user573434

+1

@ user573434 có, bạn nói đúng, như tên cho biết. Nhưng đây là cách tiếp cận đơn giản trong trường hợp bạn muốn xóa một đối tượng thành công khi xóa lệnh api, v.v. –

+0

Điều này làm việc hoàn hảo cho tôi trên một mảng đối tượng không có thuộc tính khóa duy nhất. @ user573434 phương thức lọc trả về một mảng mới không có đối tượng được lọc, do đó mảng kết quả không có đối tượng bị loại bỏ. – Jason

3

Đây là giải pháp của tôi cho rằng:

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

Với ES6, bạn có thể sử dụng mã này:

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

Giải pháp tốt nhất để loại bỏ mà không thay đổi tham chiếu mảng VÀ có khả năng triển khai thực hiện bình đẳng cụ thể – Sid

3

Bạn có thể sử dụng phương pháp splice trên một mảng để xóa các phần tử.

ví dụ nếu bạn có một mảng với tên arr sử dụng như sau:

arr.splice(2,1); 

vì vậy đây là yếu tố có chỉ số 2 sẽ là điểm khởi đầu và đối số 2 sẽ xác định có bao nhiêu yếu tố để bị xóa .

Nếu bạn muốn xóa các yếu tố cuối cùng của mảng tên arr sau đó làm điều này:

arr.splice(arr.length,1); 

này sẽ trở lại arr với yếu tố cuối cùng bị xóa.

Các vấn đề liên quan