当该对象的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);
}

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