Tengo este código que funciona:
var roles = user.getRoles() for (var i = 0; i < roles.length; i++){ if (Roles[i].getName()== 'Admin'){ --gets to this line } }Sin embargo, me preguntaba si podría obtener un VERDADERO/FALSO sin un bucle for/if como el siguiente que no funciona para mí:
if (user.getRoles().getName().indexOf('Admin') >-1){ -does not get to this line }Da error: user.getRoles().getName no es una función
si imprimo roles, el resultado es: UserRole@718816d, UserRole@1ae91200, UserRole@48baf10b, UserRole@777d6d90, UserRole@34ad99fb, UserRole@6606e47c, UserRole@79ab731e, UserRole@65269056, UserRole@3d9cbf48, 88UserRole8@6ce,88UserRole8@ Función de usuario@4e792483, Función de usuario@1f8ca93a
Parece que usar .includes debería funcionar para usted en esta situación. Parece que está buscando una cadena conocida ('Administrador')
var roles = user.getRoles() if (roles.includes('Admin')) { - gets here if true } }https://www.digitalocean.com/community/tutorials/js-array-search-methods
if(user.getRoles()?.find(role => role.getName() === 'admin')){ // do stuff }El signo de interrogación está ahí para verificar si hay un valor proveniente de getRoles.
Find devolverá nulo o el rol.
Entonces, lo que supongo de la información proporcionada es que el método getName() está definido en los objetos dentro de la matriz de roles. Entonces user.getRoles() le devuelve una matriz en la que no puede llamar al método getName()
Lo que creo que puedes hacer es user.getRoles().find(el => el.getName() === 'Admin')