JS Функция , которая возвращает наибольшее знечение среди выражений (a + b ) ( a - b ) (a * b) (a / b) дает не тот ответ

Создай функцию getLargestExpressionResult, которая принимает два числа a и b и возвращает наибольший возможный результат среди выражений:

a + b
a - b
a * b
a / b

ограничения:

Не используй тернарный оператор или ключевое слово else.
Не используй объект Math.

My code:

const getLargestExpressionResult = (a, b) => {

  let sum = a + b;
  let razn = a - b;
  let mul = a * b;
  let del = a / b;

   if(sum > (razn && mul && del)){
     return sum;
  }
   if(razn > (sum && mul && del)){
     return  razn;
  }
  if(mul > (sum && razn && del)){
     return mul;
  }
  if(del > (sum && razn && mul)){
     return del;
  }


}

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

Автор решения: Rostyslav Kuzmovych

Можно сделать например так :

const getLargestExpressionResult = (a, b) => {
  const results = [
    a + b,
    a - b,
    a * b,
    a / b
  ]

  return results.sort((e1, e2) => e2 - e1)[0]
}

console.log(getLargestExpressionResult(1, 1))

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

Проблема в том, что в результате выражений типа (razn && mul && del) всегда возвращается результат первого (если он не равен 0). Посмотрите об особенностях работы логических операторов в js здесь.

Решить задачу можно так:

const getLargestExpressionResult = (a, b) => {

  const expressions = [a - b, a * b, a / b];
  let max = a + b;

  for (const expression of expressions) {
    if (expression > max) {
      max = expression;
    }
  }
  return max;
}

console.log(getLargestExpressionResult(1, 2)); // Прибавление
console.log(getLargestExpressionResult(1, -2)); // Отнимание
console.log(getLargestExpressionResult(2, 4)); // Умножение
console.log(getLargestExpressionResult(2, 1 / 4)); // Деление

или так:

const getLargestExpressionResult = (a, b) => {
  const expressions = [a - b, a * b, a / b];
  return expressions.reduce((acc, curr) => acc > curr ? acc: curr, a + b);
}

console.log(getLargestExpressionResult(1, 2)); // Прибавление
console.log(getLargestExpressionResult(1, -2)); // Отнимание
console.log(getLargestExpressionResult(2, 4)); // Умножение
console.log(getLargestExpressionResult(2, 1 / 4)); // Деление

→ Ссылка
Автор решения: Stranger in the Q

Если не брать в расчет ограничения в вопросе - обязательно для таких случаев использовать именно Math.max а не все выше предложенное, тем более что в javascript он принимает несколько аргументов...

let solve = (a, b) => Math.max(a - b, a + b, a / b, a * b);

console.log(solve(1, 1));  // 2
console.log(solve(-1, -1)); // 1

→ Ссылка
Автор решения: Андрій Боженко

Функция выполняется, только при проверке параметров (-5, -1) выдает значение undefind, но если вместо -1 подставить любое другое отрицательное число, то функция выполняется правильно, в чем может быть загвоздка? спасибо!

const getLargestExpressionResult = function(a, b) {
  const sum = a + b;
  const razn = a - b;
  const mult = a * b;
  const del = a / b;

  if ((sum > razn) && (sum > mult) && (sum > del)){
    return sum;
  }

  if ((razn > sum) && (razn > mult) && (razn > del)){
    return razn;
  }

  if ((mult > sum) && (mult > razn) && (mult > del)){
    return mult;
  }

  if ((del > mult) && (del > razn) && (del > sum)) {
    return del;
  }
}

getLargestExpressionResult(-5, -1);
→ Ссылка
Автор решения: Maks Nikolaenko
function getLargestExpressionResult(a, b) {

  const sum = a + b; // 0
  const razn = a - (b); // 4
  const mul = a * b; // -4
  const del = a / b; // -1

   if((sum >= razn) && (sum >=mul) && (sum >=del) ){

     return sum;
  }

   if(razn >= (sum && mul && del)){

     return  razn;
  }

  if(mul >= (sum && razn && del)){

     return mul;
  }

  if(del >= (sum && razn && mul)){

     return del;
  }


}

проблема с -5 и -1 решена тем что нужно добавить условие что правильные ответы могут быть равны ну и еще там была проблема с значениями 2 и -2 ,решена в первом if

→ Ссылка
Автор решения: Serhii
function getLargestExpressionResult(a, b) {
  let result = a + b;

  if (a - b > result) {
  result = a - b;
  }
  if (a * b > result) {
  result = a * b;
  } 
  if (a / b > result) {
  result = a / b;
  }
  return result;  
 }
→ Ссылка