Angular 打字稿更新 class 如果元素在数组中

Angular typescript update class if element is in array

我在Angular12做一个APP。在我的component.ts我有一个字符串数组[]像

AccessRoles["AA","BB"]

在另一边我有一个 class 这样的

export class UserRole {
  Id :string;
  Active:boolean;
}

我的 class 有这个值 UserRole

  "UserRole": [
        {
          "id": "AA",
          "Active": "false"
    
        },
        {
          "id": "BB",
          "Active": "false"
        },
  {
          "id": "CC",
          "Active": "false"
        },
]

UserRole 中的元素在 AccessRoles

中时,我需要设置 Active = true

我可以使用嵌套的 foreach 来完成,但是性能很低。

我所说的性能不佳是指使用嵌套 ForEach 的不良做法。任何不使用嵌套 ForAEach 的解决方案都是可以接受的。

如回答所述, 它有帮助,但我需要让我的对象具有相同的记录数。如果我过滤,我将丢失那些 Active 为假的记录。

我需要的答案是这样的

 "UserRole": [
            {
              "id": "AA",
              "Active": "true"
        
            },
            {
              "id": "BB",
              "Active": "true"
            },
      {
              "id": "CC",
              "Active": "false"
            },
    ]

谢谢

您可以使用Set 来了解AccessRole 中是否存在UserRole,以避免嵌套循环。尝试以下 -

const accessRolesSet = new Set(AccessRoles /*your accessroles string array*/);

for(let r = 0; r < UserRole.length; r++) {
   if(accessRolesSet.has(UserRole[r].id)) {
     UserRole[r].active = true;
   }
}

正如其他人所建议的那样,filter 会起作用,但不会设置 active = true。 希望对你有帮助。