ฉันมีอาร์เรย์ที่ฉันสร้างใน TypeScript และมีคุณสมบัติที่ฉันใช้เป็นคีย์ หากฉันมีคีย์นั้นฉันจะลบรายการออกจากมันได้อย่างไร
ฉันมีอาร์เรย์ที่ฉันสร้างใน TypeScript และมีคุณสมบัติที่ฉันใช้เป็นคีย์ หากฉันมีคีย์นั้นฉันจะลบรายการออกจากมันได้อย่างไร
คำตอบ:
เช่นเดียวกับที่คุณทำใน JavaScript
delete myArray[key];
undefined
โปรดทราบว่าชุดนี้องค์ประกอบที่จะ
ดีกว่าที่จะใช้Array.prototype.splice
ฟังก์ชั่น:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
ส่งคืน a number
?
index
มากกว่าหนึ่งสถานที่อยู่แล้วและหนึ่งในสถานที่เหล่านั้น ( splice
) ต้องการเห็นตัวเลขหรือคุณจะได้รับข้อผิดพลาด ขณะนี้คอมไพเลอร์ไม่สามารถป้องกันคุณทำผิดพลาดได้
var index = myArray.findIndex(x => x.prop==key.prop);
มันเป็นเรื่องดีที่จะพูดถึงว่าถ้าคุณมีรายชื่อของวัตถุคุณสามารถใช้
delete myArr[2]
ตัวอักษรลบทรัพย์สิน 2
ของซึ่งยังแตกต่างกว่าmyArr
myArr[2] = undefined
คุณธรรมของเรื่องนี้คือการใช้splice
สำหรับงานนี้เพราะมันเป็นวิธีที่ปลอดภัยในการรับผลที่ต้องการโดยไม่ทำให้เกิดผลข้างเคียงที่สับสน
ถ้าอาร์เรย์เป็นประเภทของวัตถุดังนั้นวิธีที่ง่ายที่สุดคือ
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); }
เพียงหนึ่งคำเตือนหากรหัสไม่ซ้ำกันคุณจะลบทั้งหมดด้วยเหมือนกันid
ด้วย ES6 คุณสามารถใช้รหัสนี้:
removeDocument(doc){
this.documents.forEach( (item, index) => {
if(item === doc) this.documents.splice(index,1);
});
}
มันเป็นทางออกของฉันสำหรับสิ่งนั้น:
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();
}
คุณสามารถใช้splice
วิธีการในอาร์เรย์เพื่อลบองค์ประกอบ
ตัวอย่างเช่นถ้าคุณมีอาร์เรย์ที่มีชื่อarr
ใช้สิ่งต่อไปนี้:
arr.splice(2, 1);
ดังนั้นที่นี่องค์ประกอบที่มีดัชนี 2 จะเป็นจุดเริ่มต้นและอาร์กิวเมนต์ 2 จะกำหนดจำนวนองค์ประกอบที่จะลบ
ถ้าคุณต้องการที่จะลบองค์ประกอบสุดท้ายของอาร์เรย์ชื่อarr
ทำเช่นนี้:
arr.splice(arr.length-1, 1);
นี่จะส่งคืน arr พร้อมกับองค์ประกอบสุดท้ายที่ถูกลบ
ตัวอย่าง:
var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
ให้แผนกเป็นอาร์เรย์ คุณต้องการลบรายการออกจากอาร์เรย์นี้
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
นี่คือหนึ่งซับง่าย ๆ สำหรับการลบวัตถุโดยคุณสมบัติจากอาร์เรย์ของวัตถุ
delete this.items[this.items.findIndex(item => item.item_id == item_id)];
หรือ
this.items = this.items.filter(item => item.item_id !== item.item_id);
คำตอบโดยใช้โอเปอเรเตอร์ 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;
อีกหนึ่งโซลูชั่นที่ใช้ typescript:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
ใช้สิ่งนี้หากคุณต้องการลบวัตถุที่กำหนดออกจากอาร์เรย์และคุณต้องการให้แน่ใจในสิ่งต่อไปนี้:
const objWithIdToRemove;
const objIndex = this.objectsArray.findIndex(obj => obj.id === objWithIdToRemove);
if (objIndex > -1) {
this.objectsArray.splice(objIndex, 1);
}
แค่ต้องการเพิ่มวิธีการขยายสำหรับอาร์เรย์
interface Array<T> {
remove(element: T): Array<T>;
}
Array.prototype.remove = function (element) {
const index = this.indexOf(element, 0);
if (index > -1) {
return this.splice(index, 1);
}
return this;
};
var index: number = myArray.indexOf(key, 0);