Использование условного оператора для выполнения более одного оператора не будет работать - PullRequest
0 голосов
/ 03 марта 2019
function isPrime(num) {
  //TODO
  let primeNum = false;
  let prime = (num == 0 || num == 1) ? primeNum = false : (num == 2) ? console.log("2 is prime") : 
  (num % 2 == 0) ? console.log("num is divisable by 2 therefore is not prime") : { 
      console.log("number may be prime"); 
      primeNum = true;
      }
  return primeNum;
}

Я пытаюсь вызвать кодовые войны, чтобы проверить, простое ли число.В моем последнем условии я хочу вывести на консоль и установить значение в primeNum.Кажется, это работает нормально, если я делаю одно или другое, но не оба.

Я знаю, что это можно сделать, написав отдельную функцию, содержащую оба оператора, и вместо нее вызывать ее, или что я мог бы использовать if и elseзаявления, но я пытаюсь следовать лучшим практикам здесь.

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Если у вас есть для выполнения нескольких вещей внутри одного выражения (например, внутри одной из частей условного оператора), вы можете использовать оператор запятой внутри скобок.Например:

const condition = false;
const result = condition ? 'foo' : (
  console.log('falsey!'),
  'bar'
);
console.log(result);

Или, для вашего кода:

function isPrime(num) {
  const primeNum = (num == 0 || num == 1)
    ? false
    : (
      num == 2
      ? ( console.log("2 is prime"), true)
      : (
        num % 2 == 0
        ? (console.log("num is divisable by 2 therefore is not prime"), false)
        : (console.log("number may be prime"), null)
      )
    );
  return primeNum;
}
const result = isPrime(4);
console.log('4:', result)

Но это не очень хорошая идея - ее трудно читать, и это не лучшая практика.Вместо этого лучше использовать стандартные операторы if / else.

0 голосов
/ 03 марта 2019

Добавив несколько скобок в трюк, или ваш переводчик не знает, к какому выражению относится.Вложенные троицы не совсем лучшие практики.Рассмотрим несколько if () return x;

...