Не могу найти ошибку в коде при рефакторинге

Нужно избавится от логических операторов && и ||, заменив их на более читаемые конструкции if / else. Исходный код:

function getBoolean(a, b, c, d) {
  return a && a > b && c > d && a < c || b && b > a && c > a || c > d && d && d < a;
}

Вот что у меня получилось:

function getBoolean(a, b, c, d) {
    if(a < b){
      if(c > d){
        if(a < c){
          return true 
        }
      }
    }
    if(b > a){
      if(c > a){
        return true
      }
    }
    if (c > d){
      if(d < a){
        return true
      }
    }
    else{
      return false
    }
}

Все работает правильно, только input: a = 0, b = 0, c = 54, d = 3 должен возвращать false, а у меня возвращается undefined. Где ошибка?


Ответы (3 шт):

Автор решения: Эникейщик

При этих данных выполнение заходит в эту ветку:

if (c > d){
      if(d < a){
        return true
      }
    }

Но поскольку d < a дает нам false, то на этом выполнение функции и прикращается. И return для такого случая отсутствует.

→ Ссылка
Автор решения: user382492

Да я подумал и оптимизировал. Вот так получилось

function getBoolean(a, b, c, d) {
  if (a < b){
    return true;
  } if (a < d){
    return false;
  } if (c > d) {
    return true;
  } if (a === c) {
    return false;
  }
}
→ Ссылка
Автор решения: Дмытрык
if (!a || !b || !d) return false;
if (a > b && c > d && a < c) return true;
if (b > a && c > a ) return true;
if (c > d && d < a) return true;
return false
→ Ссылка