2017-09-05 3 views
0

Je souhaite supprimer un objet dans un tableau lorsque l'ID de cet objet est égal à l'ID de l'objet comparé. À l'heure actuelle, il ne supprime que le premier objet du tableauAngulaire 2: Supprimer un objet dans Array

if(this.selectedProducts.length > 0){ 
 
     for(let x of this.selectedProducts){ 
 
      if(prod._id === x._id){ 
 
       this.selectedProducts.splice(x,1); //this is the part where I 'delete' the object 
 
       this.appended = false; 
 
      }else{ 
 
       this.appended = true; 
 
      } 
 
     } 
 
     if (this.appended) { 
 
      this.selectedProducts.push(prod); 
 
     } 
 
    }else{ 
 
     this.selectedProducts.push(prod);     
 
    } 
 
    this.selectEvent.emit(this.selectedProducts); 
 
}

+0

peut être votre identifiant se présente comme un ou somehting. –

+0

L'émetteur d'événements est angulaire si @AniruddhaDas – Char

+0

Si 'selectedProducts' était un dictionnaire, toute l'opération pourrait simplement être' selectedProducts [prod._id] = prod' – Pace

Répondre

1
this.selectedProducts.splice(x,1); 

Le premier paramètre à splice doit être l'indice, et non l'objet.

Si vous utilisez for...of, vous ne pouvez pas obtenir facilement l'index. Donc, vous devriez utiliser une boucle normale for à la place. Avec quelques simplifications, votre code ressemblerait à ceci:

for (let i = this.selectedProducts.length - 1; i >= 0; this.selectedProducts.length; i--) { 
    if (prod._id === this.selectProducts[i]._id) { 
     this.selectedProducts.splice(i, 1); //this is the part where I 'delete' the object 
    } 
} 
this.selectedProducts.push(prod); 

Il est très probable que l'utilisation filter serait mieux quand même:

this.selectedProducts = this.selectedProducts.filter(x => prod._id !== x._id).concat(prod);