如何根据条件在对象数组中推送值并避免在 Angular 14 中推送重复项

How to Push value in array of object based on condition and avoid pushing duplicates in Angular 14

提问人:tripti tiwari 提问时间:2/24/2023 最后编辑:Sebastian Kaczmarektripti tiwari 更新时间:2/24/2023 访问量:454

问:

下面是我的代码,这里我想将对象推入数组中,if is 并且如果它不在数组中。但是在我的代码中,它在插入两个值后多次插入值。该对象如下所示,是我的方法,如果我单击它,我将获得 piece 对象。subModuleselectedPiecessubmodule.activetrueselectedPiecesPiecesactivateClass

Pieces = {
  pieceId: 1,
  img: '../../../../assets/img/piece.PNG',
  letter: 'O',
  active: false
}

activateClass(subModule){
    subModule.active = !subModule.active;  
    subModule.activeli = !subModule.activeli; 
    if(this.selectedPieces.length == 0 && subModule.active == true){
      this.selectedPieces.push(subModule);
    }
    else{
    for(let i=0;i< this.selectedPieces.length; i++){
      if(subModule.active == true && subModule.pieceId !== this.selectedPieces[i].pieceId){
        this.selectedPieces.push(subModule);
      }
      if(subModule.active == false && subModule.pieceId == this.selectedPieces[i].pieceId){
        this.selectedPieces.splice(i);
      }
    }
    }
   
    console.log(this.selectedPieces);
  }
JavaScript jQuery 数组 对象 angular14

评论

0赞 CodeThing 2/24/2023
pieceId 和 pieceid 是不同的。请检查外壳。此外,如果您只想删除一个元素,拼接方法需要第二个参数。
0赞 tripti tiwari 2/24/2023
在前 2 次中,它正确插入了值。之后,对于第 3 个值,它插入两次,对于第 4 个值,它插入 4 次重复值。同样,拼接也不起作用
0赞 CodeThing 2/24/2023
这是意料之中的,因为您正在推动内部循环。因此,对于数组中的每个项目,它都会检查条件并推送提供的元素。
0赞 tripti tiwari 2/24/2023
请帮我使用正确的代码

答:

0赞 CodeThing 2/24/2023 #1

试试这个

activateClass(subModule){
  subModule.active = !subModule.active;  
  subModule.activeli = !subModule.activeli; 
  if (this.selectedPieces.length === 0 && subModule.active === true){
    this.selectedPieces.push(subModule);
  } else {
    let index = this.selectedPieces.findIndex((piece) => piece.pieceId === subModule.pieceId);
    if (subModule.active === true && index === -1) {
      this.selectedPieces.push(subModule);
    }
    if (subModule.active === false && index >= 0) {
      this.selectedPieces.splice(index, 1);
    }
  }

  console.log(this.selectedPieces);
}

评论

0赞 tripti tiwari 2/24/2023
当数组中只剩下 2 个值时,它不会从 selectedPieces 中删除这些值。数组中始终保留一个值
0赞 CodeThing 2/24/2023
@triptitiwari 你能试试这个更新的答案吗?