Ho un array che ho creato in TypeScript e ha una proprietà che uso come chiave. Se ho quella chiave, come posso rimuovere un elemento da esso?
Ho un array che ho creato in TypeScript e ha una proprietà che uso come chiave. Se ho quella chiave, come posso rimuovere un elemento da esso?
Risposte:
Come faresti con JavaScript.
delete myArray[key];
Si noti che questo imposta l'elemento su undefined
.
Meglio usare la Array.prototype.splice
funzione:
const index = myArray.indexOf(key, 0);
if (index > -1) {
myArray.splice(index, 1);
}
indexOf
restituisce a number
?
index
più di una volta e uno di quei posti ( splice
) vuole vedere un numero o otterrai un errore. Attualmente il compilatore non può impedirti di fare errori lì.
var index = myArray.findIndex(x => x.prop==key.prop);
.
delete myArr[2]
elimina letteralmente la proprietà 2
di myArr
, che è anche diversa da myArr[2] = undefined
. La morale di questa storia è usare solo splice
per questo compito perché è un modo sicuro per ottenere l'effetto desiderato senza confondere gli effetti collaterali.
Se l'array è il tipo di oggetti, il modo più semplice è
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 parola di avvertimento, se gli ID non sono univoci rimuoverai tutti con lo stessoid
Con ES6 puoi usare questo codice:
removeDocument(doc){
this.documents.forEach( (item, index) => {
if(item === doc) this.documents.splice(index,1);
});
}
È la mia soluzione per questo:
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();
}
È possibile utilizzare il splice
metodo su un array per rimuovere gli elementi.
ad esempio se si dispone di un array con il nome, arr
utilizzare quanto segue:
arr.splice(2, 1);
quindi qui l'elemento con l'indice 2 sarà il punto di partenza e l'argomento 2 determinerà il numero di elementi da eliminare.
Se si desidera eliminare l'ultimo elemento dell'array denominato, arr
procedere come segue:
arr.splice(arr.length-1, 1);
Questo restituirà arr con l'ultimo elemento eliminato.
Esempio:
var arr = ["orange", "mango", "banana", "sugar", "tea"];
arr.splice(arr.length-1, 1)
console.log(arr); // return ["orange", "mango", "banana", "sugar"]
lascia che dipartimenti sia un array. Si desidera rimuovere un elemento da questo array.
departments: string[] = [];
removeDepartment(name: string): void {
this.departments = this.departments.filter(item => item != name);
}
Ecco una semplice linea per rimuovere un oggetto per proprietà da una matrice di oggetti.
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);
Risposta utilizzando l'operatore di diffusione 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;
Un'altra soluzione usando Typescript:
let updatedArray = [];
for (let el of this.oldArray) {
if (el !== elementToRemove) {
updated.push(el);
}
}
this.oldArray = updated;
Utilizzare questo, se è necessario rimuovere un determinato oggetto da un array e si desidera essere certi di quanto segue:
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);