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?
fuente
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?
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);
}
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);
}
Solo quería agregar un método de extensión para una matriz.
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);
indexOf
devuelve anumber
?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 propiedad2
demyArr
, que también es diferente demyArr[2] = undefined
. La moraleja de esta historia es usarlasplice
para esta tarea porque es una forma segura de obtener el efecto deseado sin confundir los efectos secundarios.