0

Однострочный if/else в JavaScript

13

Описание проблемы

У меня есть логика, которая переключает значения true/false с помощью конструкции switch и else/if, но я хотел бы сделать её более компактной и не использовать оператор switch. В идеале, условие if/else должно быть преобразовано в одну короткую строку. Спасибо!!!

Вот пример кода:

var properties = {};
var IsItMuted = scope.slideshow.isMuted();
if (IsItMuted === true) {
    properties['Value'] = 'On';
} else {
    properties['Value'] = 'Off';
}       

Как можно переписать этот код в более сжатом виде?

3 ответ(ов)

1

Вы хотите использовать тернарный оператор:

properties['Value'] = (IsItMuted === true) ? 'On' : 'Off';

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

0

Код, который вы привели, создает объект properties с одним свойством Value. Это свойство получает значение в зависимости от результата вызова функции scope.slideshow.isMuted().

Если isMuted() возвращает true, то Value будет равно строке "on", в противном случае - строке "off".

Однако чтобы сделать код более понятным и избежать путаницы с оператором &&, лучше использовать тернарный оператор, который делает логику более явной. Например, можно переписать это так:

var properties = { "Value": scope.slideshow.isMuted() ? "on" : "off" };

В итоге, объект properties будет содержать в Value "on", если слайд-шоу выключено, и "off", если включено.

0

Вам не нужно создавать пустой объект, он может иметь свойства, и если вы хотите сократить код, вам не нужен и isItMuted. Вот как можно объединить всё в одну строку:

var properties = { Value: scope.slideshow.isMuted() ? 'On' : 'Off' };

Если вам нужно ещё больше упростить, то этот код уже является наиболее сжатым вариантом для данной задачи.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь