Сокращение для выражения if-else
У меня есть код с множеством операторов if/else, похожих на это:
var name = "true";
if (name == "true") {
var hasName = 'Y';
} else if (name == "false") {
var hasName = 'N';
};
Но есть ли способ сделать эти утверждения короче? Что-то вроде ? "true" : "false"
...
Ответы
Ответ 1
Используя тернарный :?
оператор [spec].
var hasName = (name === 'true') ? 'Y' :'N';
Тернарный оператор позволяет писать сокращенные инструкции if..else
точно так, как вы хотите.
Похоже:
(name === 'true')
- наше условие
?
- сам тернарный оператор
'Y'
- результат, если условие оценивается как true
'N'
- результат, если условие оценивается как false
Итак, вкратце (question)?(result if true):(result is false)
, как вы можете видеть - он возвращает значение выражения, поэтому мы можем просто назначить его переменной, как в приведенном выше примере.
Ответ 2
Вы можете использовать объект в качестве карты:
var hasName = ({
"true" : "Y",
"false" : "N"
})[name];
Это также хорошо масштабируется для многих опций
var hasName = ({
"true" : "Y",
"false" : "N",
"fileNotFound" : "O"
})[name];
(Бонусная точка для людей, получающих ссылку)
Примечание: вы должны использовать фактические булевы вместо строкового значения "true" для ваших переменных, указывающих значения истинности.
Ответ 3
Попробуйте это
hasName = name ? 'Y' : 'N';
Ответ 4
Попробуйте
var hasName = 'N';
if (name == "true") {
hasName = 'Y';
}
Или попробуйте с ternary operator
как
var hasName = (name == "true") ? "Y" : "N" ;
Даже просто вы можете попробовать
var hasName = (name) ? "Y" : "N" ;
Поскольку имя имеет либо Yes
, либо No
, но я не уверен в этом.
Ответ 5
Большинство ответов здесь будут работать нормально, если у вас есть только two
условия в вашем if-else. Для более того, я предполагаю, что вы хотите, вы будете использовать массивы.
Каждый элемент, соответствующий соответствующему элементу в массиве names
, у вас будет элемент в массиве hasNames
с точно таким же индексом. Тогда это вопрос этих четырех строк.
names = "true";
var names = ["true","false","1","2"];
var hasNames = ["Y","N","true","false"];
var intIndex = names.indexOf(name);
hasName = hasNames[intIndex ];
Этот метод также может быть реализован с использованием объектов и свойств в виде показанных Benjamin.