Подтвердить что ты не робот

Сокращение для выражения if-else

У меня есть код с множеством операторов if/else, похожих на это:

var name = "true";

if (name == "true") {
    var hasName = 'Y';
} else if (name == "false") {
    var hasName = 'N';
};

Но есть ли способ сделать эти утверждения короче? Что-то вроде ? "true" : "false"...

4b9b3361

Ответ 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.