2017-09-05 109 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来作为一个或服用点。我没有看到与角度相关的任何事情 –

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