2017-09-05 7 views
0

オブジェクトのIDが比較対象オブジェクトのIDと等しい場合、配列内のオブジェクトを削除したいと思います。現在のところ、それだけ角2:配列内のオブジェクトを削除する

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

あなたのIDは、1つまたはsomehtingとして来るかもしれません。 –

+0

@AniruddhaDas – Char

+0

のイベントエミッタが角張っています。 'selectedProducts'は、全体の操作がちょうど' selectedproducts [prod._id] = prod'となる辞書だった場合 – Pace

答えて

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

spliceへの最初のパラメータは、インデックス、いないオブジェクトである必要があり、配列内の最初のオブジェクトを削除します。

for...ofを使用している場合は、インデックスを簡単に取得できません。通常のforループを使用する必要があります。いくつかの追加の単純化して、あなたのコードは次のようになります。

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); 

それはfilterを使用することがとにかく良いだろう可能性が高いです。

this.selectedProducts = this.selectedProducts.filter(x => prod._id !== x._id).concat(prod); 
関連する問題