Para verificar si existe un elemento en una matriz, ¿qué método es mejor? ¿Hay otras formas de hacer una comprobación booleana?
type ObjType = { name: string } let privileges: ObjType[] = [{ name: "ROLE_USER" }, { name: "ROLE_ADMIN" }, { name: "ROLE_AUTHOR" }]; //method 1 const hasAdminPriv = privileges instanceof Array && privileges.find((ele: ObjType) => ele.name === "ROLE_ADMIN"); //method 2 const found = privileges instanceof Array && privileges.find((ele: ObjType) => ele.name === "ROLE_ADMIN") !== undefined; //method 3 const privilSet = new Set<string>(); privileges.forEach((element: ObjType)=> privilegeSet.add(element.name)); //method 4 const privilegeSet2 = new Set<string>(privileges.map((element: ObjType) => element.name)); console.log(privilegeSet2.has("ROLE_ADMIN"));Lo más probable es que dependa de la forma en que quieras usar esto.
La conversión de conjunto podría ser beneficiosa, si tiene la intención de consultar varias cosas a la vez.
Tal vez prefiera usar some para su consulta, si realmente solo está interesado si un valor está en la matriz y no para el resto del objeto.
También sugeriría echar un vistazo a las includes , ya que eso puede ser exactamente lo que está buscando, al menos para objetos triviales en una matriz.
Dicho esto, si se ve obligado a usar uno de los métodos provistos, diría que el método 2 es mejor si desea verificar un valor y el método 4 si desea consultar múltiples valores o puede almacenar en caché el conjunto generado para grandes matrices y consultas relativamente frecuentes.
Nota al margen:
Si todo su código está escrito a máquina, realmente no veo por qué usaría la privileges instanceof Array . Por supuesto, esto puede ser necesario si la matriz proviene de un código js o un archivo, pero incluso entonces argumentaré que debe verificar el tipo cuando recibe la matriz y luego asumir que es una matriz si se escribe de esa manera. .