Код, работающий с троичным оператором, но не с операторами if else

#javascript #ecmascript-6 #ternary-operator

#javascript #ecmascript-6 #ternary-operator

Вопрос:

Эта программа javascript работает с троичным оператором, как и ожидалось, но не с операторами if else. Что я делаю не так?

Я пытаюсь решить некоторые базовые упражнения javascript, но я застрял в этом вопросе. https://www.w3resource.com/javascript-exercises/javascript-basic-exercise-74.php

 //Working code with ternary operator
    function all_max(nums) {
      var max_val = nums[0] > nums[2] ? nums[0] : nums[2];

      nums[0] = max_val;
      nums[1] = max_val;
      nums[2] = max_val;

      return nums;
      }
    console.log(all_max([20, 30, 40]));
    console.log(all_max([-7, -9, 0]));
    console.log(all_max([12, 10, 3]));
  

// С оператором if-else

   function all_max(nums) {
     if (var max_val = nums[0] > nums[2]) {
     return nums[0];
    } else {
     return nums[2];
  }

     nums[0] = max_value ;
     nums[1] = max_value ;
     nums[2] = max_value ;

return nums;
}
console.log(all_max([20, 30, 40]));
console.log(all_max([-7, -9, 0]));
console.log(all_max([12, 10, 3]));
  

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

1. У вас есть return операторы во второй версии. return Оператор немедленно завершает работу функции.

2. variable assignment inside if it statement просто слишком уродливо

3. @Pointy не повезло даже после удаления оператора return

4. @CodeManiac Хороший момент. переместил его за пределы оператора if

Ответ №1:

Вы должны присваивать значение в теле инструкции if / else, а не в сравнении, поэтому что-то вроде этого должно работать для вас:

 function all_max(nums) {
  let max_val = 0
  if (nums[0] > nums[2]) {
    max_val = nums[0];
  } else {
    max_val = nums[2];
  }
  nums[0] = max_val;
  nums[1] = max_val;
  nums[2] = max_val;

  return nums;
}

console.log(all_max([20, 30, 40]));
console.log(all_max([-7, -9, 0]));
console.log(all_max([12, 10, 3]));  

Ответ №2:

Приведенный ниже код работает

       function all_max(nums) {
let max_val = nums[0] > nums[2]
     if (max_val) {
     return nums[0];
    } else {
     return nums[2];
  }

     nums[0] = max_value ;
     nums[1] = max_value ;
     nums[2] = max_value ;

return nums;
}
console.log(all_max([20, 30, 40]));
console.log(all_max([-7, -9, 0]));
console.log(all_max([12, 10, 3]));
  

вычислите max_val вне условия if и поместите результат в условие if
пусть max_val = nums[0] > nums[2]

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

1. Убедитесь, что max_value переменная не определена

Ответ №3:

Объявление переменной внутри if оператора не допускается. Удалите его.

Попробуйте это, если вам нужно только максимальное значение

  function all_max(nums) {
   if (nums[0] > nums[2]) {
         max_value =  nums[0];
   } else {
         max_value = nums[2];
   }
   return max_value;
 } 
 console.log(all_max([20, 30, 40]));
 console.log(all_max([-7, -9, 0]));
 console.log(all_max([12, 10, 3]));  

если вы хотите, чтобы для всех элементов в массиве было установлено максимальное значение, используйте это

 function all_max(nums) {
     if (nums[0] > nums[2]) {
             max_value =  nums[0];
     } else {
             max_value = nums[2];
     }
     nums[0] = max_value;
     nums[1] = max_value;
     nums[2] = max_value;
     return nums;
}
console.log(all_max([20, 30, 40]));
console.log(all_max([-7, -9, 0]));
console.log(all_max([12, 10, 3]));