Tengo una matriz que he creado en TypeScript y tiene una propiedad que uso como clave. Si tengo esa clave, ¿cómo puedo eliminar un elemento?
Tengo una matriz que he creado en TypeScript y tiene una propiedad que uso como clave. Si tengo esa clave, ¿cómo puedo eliminar un elemento?
Respuestas:
De la misma manera que lo haría en JavaScript.
delete myArray[key];
Tenga en cuenta que esto establece el elemento en undefined
.
Mejor usar la Array.prototype.splice
función:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
devuelve a number
?
index
en más de un lugar y uno de esos lugares ( splice
) quiere ver un número o recibirá un error. Actualmente el compilador no puede evitar que cometas errores allí.
var index = myArray.findIndex(x => x.prop==key.prop);
.
delete myArr[2]
literalmente elimina la propiedad 2
de myArr
, que también es diferente de myArr[2] = undefined
. La moraleja de esta historia es usarla splice
para esta tarea porque es una forma segura de obtener el efecto deseado sin confundir los efectos secundarios.
Si la matriz es un tipo de objetos, entonces la forma más simple es
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); }
Solo una palabra de advertencia, si los ID no son únicos, los eliminará todos con el mismoid
Con ES6 puede usar este código:
removeDocument(doc){
this.documents.forEach( (item, index) => {
if(item === doc) this.documents.splice(index,1);
});
}
Es mi solución para eso:
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();
}
Puedes usar el splice
método en una matriz para eliminar los elementos.
por ejemplo, si tiene una matriz con el nombre, arr
use lo siguiente:
arr.splice(2, 1);
así que aquí el elemento con el índice 2 será el punto de partida y el argumento 2 determinará cuántos elementos se eliminarán.
Si desea eliminar el último elemento de la matriz nombrada arr
, haga esto:
arr.splice(arr.length-1, 1);
Esto devolverá arr con el último elemento eliminado.
Ejemplo:
var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
dejar departamentos es una matriz. Desea eliminar un elemento de esta matriz.
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
Aquí hay un revestimiento simple para eliminar un objeto por propiedad de una matriz de objetos.
delete this.items[this.items.findIndex(item => item.item_id == item_id)];
o
this.items = this.items.filter(item => item.item_id !== item.item_id);
Responda utilizando el operador de propagación 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;
Una solución más usando el mecanografiado:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
Use esto, si necesita eliminar un objeto determinado de una matriz y desea estar seguro de lo siguiente:
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);