Проверка массива на наличие существующих элементов массива, переданных в качестве параметра

#reactjs

#reactjs

Вопрос:

У меня есть 2 функции react ниже

      const hasPermission = (permission: string) => {
        if (user?.permissionsEnabled === false) {
          return true
        }
        return permissions.includes(permission) || false
      }
  

Приведенная ниже функция принимает массив определенного типа

Я хочу ситуацию, когда, если какой-либо элемент в переданном здесь массиве (параметр) существует в enum UserPermissions, я хочу вернуть значение true. возврат true, похоже, не работает в приведенном ниже методе.

       const hasAnyPermission = (permissionsPassed: UserPermissions[]) => {
        permissionsPassed.map(permission => {
          if (hasPermission(permission)) {
            return true
          }
        })
        return false
      }
  

Я вызываю hasAnyPermission следующим образом..

     hasAnyPermission([Edit,View])
  

Ответ №1:

Array.prototype.map возвращает только массив, который вам нужно использовать Array.prototype.some вместо:

 const hasAnyPermission = (permissionsPassed: UserPermissions[]) => {
  return permissionsPassed.some(permission => {
    if (hasPermission(permission)) {
      return true
    }
  })
}
  

Что эквивалентно:

 const hasAnyPermission = (permissionsPassed: UserPermissions[]) => {
  return permissionsPassed.some(permission => hasPermission(permission));
}
  

Или используйте обычные циклы for-of:

 const hasAnyPermission = (permissionsPassed: UserPermissions[]) => {
  for(let permission of permissionsPassed) {
    if (hasPermission(permission)) {
      return true
    }
  }
  return false
}
  

Комментарии:

1. Да, выберите тот, который вам нравится

Ответ №2:

Сокращенный полностью рабочий пример:

 enum UserPermissions { Edit, View, Delete }
const user = { permissions: [UserPermissions.View] }
console.log("has permission?", hasAnyPermission(user, [UserPermissions.Delete]))

function hasAnyPermission(user, permissions: UserPermissions[]) {
  if (user?.permissionsEnabled === false) return true
  const userHasPermission = (p) => user.permissions.includes(p)
  return permissions.some(userHasPermission)
}