Eu tenho uma matriz que eu criei no TypeScript e tem uma propriedade que eu uso como chave. Se eu tiver essa chave, como posso remover um item dela?
Eu tenho uma matriz que eu criei no TypeScript e tem uma propriedade que eu uso como chave. Se eu tiver essa chave, como posso remover um item dela?
Respostas:
Da mesma maneira que você faria em JavaScript.
delete myArray[key];
Observe que isso define o elemento para undefined
.
Melhor usar a Array.prototype.splice
função:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
retorna a number
?
index
mais de uma vez o local e um desses locais ( splice
) deseja ver um número ou você receberá um erro. Atualmente, o compilador não pode impedir que você cometa erros por lá.
var index = myArray.findIndex(x => x.prop==key.prop);
.
delete myArr[2]
exclui literalmente a propriedade 2
de myArr
, que também é diferente de myArr[2] = undefined
. A moral desta história é apenas usar splice
para esta tarefa, porque é uma maneira segura de obter o efeito desejado sem confundir efeitos colaterais.
Se a matriz for do tipo de objetos, a maneira mais simples é
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); }
apenas uma palavra de aviso, se os IDs não são exclusivos você irá remover todos com o mesmoid
Com o ES6, você pode usar este código:
removeDocument(doc){
this.documents.forEach( (item, index) => {
if(item === doc) this.documents.splice(index,1);
});
}
É a minha solução para isso:
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();
}
Você pode usar o splice
método em uma matriz para remover os elementos.
por exemplo, se você tiver uma matriz com o nome, arr
use o seguinte:
arr.splice(2, 1);
então aqui o elemento com o índice 2 será o ponto de partida e o argumento 2 determinará quantos elementos serão excluídos.
Se você deseja excluir o último elemento da matriz nomeada arr
, faça o seguinte:
arr.splice(arr.length-1, 1);
Isso retornará arr com o último elemento excluído.
Exemplo:
var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
deixar departamentos é uma matriz. Você deseja remover um item dessa matriz.
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
Aqui está um liner simples para remover um objeto por propriedade de uma matriz de objetos.
delete this.items[this.items.findIndex(item => item.item_id == item_id)];
ou
this.items = this.items.filter(item => item.item_id !== item.item_id);
Responder usando o operador de propagação 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;
Mais uma solução usando o Typecript:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
Use isso, se você precisar remover um determinado objeto de uma matriz e quiser ter certeza do seguinte:
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);