Angular 2:删除Array中的对象

时间:2017-09-05 02:06:01

标签: arrays angular delete-row array-splice

当该对象的ID等于要比较的对象的ID时,我想删除数组中的对象。目前,它只删除数组中的第一个对象



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




1 个答案:

答案 0 :(得分:2)

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