Я хочу работать с тернарным оператором, но получаю следующее сообщение об ошибке:
"Неожиданный токен, ожидается:"
Это почему?
Это мой первый код:
const GetUp = (num) => {
for (let i = 1; i <= num; i++) {
if (i % 3 === 0) {
console.info('Get')
}
if (i % 5 === 0) {
console.info('Up')
}
if (i % 3 === 0 && i % 5 === 0) {
console.info('GetUp')
} else {
console.info(i)
}
}
}
GetUp(200)
Это мой недавний код:
const SetRuc = (num) => {
for (let i = 1; i <= num; i++) {
(i % 3 === 0) ? console.info('Set')
(i % 5 === 0) ? console.info('Ruc')
(i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
}
}
SetRuc(100)
И ваш случай не очень хорошее использование тернарных операторов, придерживайтесь if
выглядит как Fizz Buzz под другим именем.
Это действительно похоже на Fizz Buzz, но при кратном 5 а также 3 выводится "Set Ruc SetRuc" вместо "SetRuc".
Что касается вашего исходного кода (у нового есть та же проблема), предположим, что он должен следовать классическим правилам для fizzbuzz, сначала поместите последнее условие и используйте else if после первого.
Спасибо Федерико! Так было



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Например, это:
(i % 3 === 0) ? console.info('Set')
не предоставляет опции : для ?. Если вы не хотите, чтобы что-либо происходило в случае, если проверка ? ложна, вы можете просто указать пустой объект или undefined:
(i % 3 === 0) ? console.info('Set') : {}
используйте && для выстрела, если без else
добавьте точки с запятой ;, чтобы сообщить ему, что это конец инструкции, в противном случае он будет оценивать три строки как одну инструкцию.
const SetRuc = (num) => {
for (let i = 1; i <= num; i++) {
(i % 3 === 0) && console.info('Set');
(i % 5 === 0) && console.info('Ruc');
(i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i);
}
}
SetRuc(100)Вы неправильно используете тернарный оператор, синтаксис следующий:
condition ? expr1 : expr1
Предполагая, что expr1 будет выполняться, если условие истинно, в противном случае будет выполняться expr2.
Итак, вы можете захотеть это:
const SetRuc = (num) => {
for (let i = 1; i <= num; i++) {
(i % 3 === 0) ? console.info('Set') :
(i % 5 === 0) ? console.info('Ruc') :
(i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
}
}
SetRuc(100)
const SetRuc = (num) => {
for (let i = 1; i <= num; i++) {
(i % 3 === 0) ? console.info('Set') :
(i % 5 === 0) ? console.info('Ruc') :
(i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i)
}
}
SetRuc(100)
вы пропустили : после console.info('Set') и console.info('Ruc')
Если вы не хотите ничего делать в случае ложного результата в тернарном операторе. можно просто сказать что-то вроде statement ? 'expression' : null
просто упомяните там null. Что-то вроде
const SetRuc = (num) => {
for (let i = 1; i <= num; i++) {
(i % 3 === 0) ? console.info('Set') : null;
(i % 5 === 0) ? console.info('Ruc') : null;
(i % 3 === 0 && i % 5 === 0) ? console.info('SetRuc') : console.info(i);
}
}
SetRuc(100)
Когда вы используете тернарный оператор, вы должны предоставить ему альтернативу (после
:), как вы делали в предыдущем. Вот почему он называется "тройным": потому что он состоит из трех частей, этоcondition ? true-branch : false-branch.