关于angular:如何检查数组是否包含特定值?

How to check if an array contains a specific value?

有以下功能:

1
2
3
const role: string = tokenPayload.params.role.map(r => {
  return r.value;
}) [0];

它返回以下结果:

author

如果[0]remove的指标,这是它的归来。

["author","admin"]

它是可能的两个全功能的返回值在相同的格式为第一exemple吗?

教育的"角色"将被用于一===比较,结果在那只接受特定的格式。我会把全功能的更好的理解。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
canActivateChild(route: ActivatedRouteSnapshot): boolean {
    const helper = new JwtHelperService();
    const expectedRole = route.data.expectedRole;
    const token = this.authService.getToken();
    const tokenPayload = helper.decodeToken(token);
    const role: string = tokenPayload.params.role.map(r => {
  return r.value;
}) [0];
console.log(role);
if (!this.authService.isAuthenticated() || role !== expectedRole) {
  this.router.navigate(['/admin']);
  return false;
}
return true;
}

成分:路由器

1
2
3
4
5
6
7
8
9
10
11
12
13
{
    path: 'container-users',
    component: ContainerUsersComponent,
    canActivateChild: [AuthGuard],
    data: {
      expectedRole: 'admin'
    },
    children: [
      { path: '', component: ListUsersComponent },
      { path: 'list-users', component: ListUsersComponent },
      { path: 'form-new-user', component: FormNewUserComponent }
    ]
  }


似乎应用程序中的用户可以有多个角色,您要做的是检查附加到用户的这些角色中是否有一个是expectedRoleexpectedRole是单个字符串值,而附加到用户的角色由一些对象的数组表示,其中角色名存储在value属性中,因此不能使用===运算符,应使用indexOf()some()includes()等方法来验证用户是否分配了expectedRole

因此,我将直接检查所需角色,而不是使用map功能选择所有角色名称:

1
const hasExpectedRole = tokenPayload.params.role.some(r => r.value === expectedRole)

后来,在if号声明中

1
if (... || !hasExpectedRole)


不要使用map生成的数组的第一个元素,而是使用字符串数组并检查它是否包含expectedRole字符串:

1
2
3
4
5
6
7
8
9
roles = tokenPayload.params.role.map(r => {
  return r.value;
});

// Use the following function
(roles.indexOf(expectedRole) == -1);

// Instead of this
role !== expectedRole;

看看如何在javascript中查找数组是否包含特定的字符串?-这解释了如何检查值数组是否包含单个值。