Tôi có một mảng mà tôi đã tạo trong TypeScript và nó có một thuộc tính mà tôi sử dụng làm khóa. Nếu tôi có chìa khóa đó, làm thế nào tôi có thể xóa một mục khỏi nó?
Tôi có một mảng mà tôi đã tạo trong TypeScript và nó có một thuộc tính mà tôi sử dụng làm khóa. Nếu tôi có chìa khóa đó, làm thế nào tôi có thể xóa một mục khỏi nó?
Câu trả lời:
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 undefined
.
Tốt hơn để sử dụng Array.prototype.splice
chức năng:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
trả về a number
?
index
ở nhiều nơi hơn một lần và một trong những nơi đó ( splice
) muốn xem 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 mắc lỗi ở đó.
var index = myArray.findIndex(x => x.prop==key.prop);
.
delete myArr[2]
nghĩa đen sẽ xóa thuộc tính 2
của myArr
, điều này cũng khác với myArr[2] = undefined
. Đạo đức của câu chuyện này là chỉ sử dụng splice
cho nhiệm vụ này bởi vì đây là một cách an toàn để có được hiệu quả mong muốn mà không gây nhầm lẫn tác dụng phụ.
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);
this.foo_objects = this.foo_objects.filter(obj => obj !== foo_object)[0];
deleteById(id: string) { this.data = this.data.filter(d => d.id !== id); }
Chỉ cần một từ cảnh báo, nếu Id không phải là duy nhất, bạn sẽ xóa tất cả bằng cùngid
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);
});
}
Đó là giải pháp của tôi cho điều đó:
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();
}
Bạn có thể sử dụng splice
phương thức trên một mảng để loại bỏ các phần tử.
ví dụ: nếu bạn có một mảng với tên, hãy arr
sử dụng như sau:
arr.splice(2, 1);
vì vậy ở đây phần tử có chỉ số 2 sẽ là điểm bắt đầu và đối số 2 sẽ xác định có bao nhiêu phần tử sẽ bị xóa.
Nếu bạn muốn xóa phần tử cuối cùng của mảng có tên arr
thì hãy làm điều này:
arr.splice(arr.length-1, 1);
Điều này sẽ trả về mảng với phần tử cuối cùng bị xóa.
Thí dụ:
var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
hãy để các phòng ban là một mảng. Bạn muốn loại bỏ một mục từ mảng này.
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
Đây là một lớp lót đơn giản để loại bỏ một đối tượng theo thuộc tính khỏi một mảng các đối tượng.
delete this.items[this.items.findIndex(item => item.item_id == item_id)];
hoặc là
this.items = this.items.filter(item => item.item_id !== item.item_id);
Trả lời bằng toán tử trải rộng TypeScript (...)
// Your key
const key = 'two';
// Your array
const arr = [
'one',
'two',
'three'
];
// Get either the index or -1
const index = arr.indexOf(key); // returns 0
// Despite a real index, or -1, use spread operator and Array.prototype.slice()
const newArray = (index > -1) ? [
...arr.slice(0, index),
...arr.slice(index + 1)
] : arr;
Thêm một giải pháp sử dụng Bản mô tả:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
Sử dụng cái này, nếu bạn cần xóa một đối tượng đã cho khỏi một mảng và bạn muốn chắc chắn về những điều sau đây:
const objWithIdToRemove;
const objIndex = this.objectsArray.findIndex(obj => obj.id === objWithIdToRemove);
if (objIndex > -1) {
this.objectsArray.splice(objIndex, 1);
}
var index: number = myArray.indexOf(key, 0);