Как выполнить троичное выражение для 3 условий с одним условием по умолчанию - PullRequest
0 голосов
/ 11 января 2019

Возможно ли выполнить троичное для 3 условий, но с одним условием по умолчанию?

Вот мой код:

<Button
  rounded={true}
  title='Add Address'
  backgroundColor='#2980b9'
  rightIcon={{name: 'arrow-forward'}}
  disabled={this.state.timeSlotItemSelected === null || this.state.quantityItemSelected === null ? true : false}
/>

В этом this.state.timeSlotItemSelected по умолчанию. Что мне нужно, так это то, когда this.state.timeSlotItemSelected и this.state.quantityItemSelected равны нулю, результат должен быть true, а когда this.state.timeSlotItemSelected и this.state.deliveryOptionSelected равны нулю, то он также должен быть true. В противном случае это должно быть false.

Как мне выполнить это для обоих условий?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

(this.state.timeSlotItemSelected === null && this.state.quantityItemSelected === null) || (this.state.deliveryOptionSelected === null && this.state.timeSlotItemSelected === null)? true: false

0 голосов
/ 11 января 2019

Это некоторая булева алгебра (вероятно, я буду использовать неправильные слова, я выучил математику на немецком языке, поэтому изменения и комментарии приветствуются):

Давайте начнем с ваших устных условий, переведенных на JavaScript (я удалил this.state для лучшей читаемости):

(timeSlotItemSelected === null && quantityItemSelected === null) || (timeSlotItemSelected === null && deliveryOptionSelected === null)

Мы можем выделить timeSlotItemSelected, поэтому это выглядит так:

timeSlotItemSelected === null && (quantityItemSelected === null || deliveryOptionSelected === null)

Теперь вы можете использовать его в операторе if или в тройном операторе.

Относительно вашего вопроса о «условии по умолчанию»:

Буквально нет способа установить значение по умолчанию при работе с логическим значением, они могут быть истинными или ложными.

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

Переменная с типом boolean может иметь значение по умолчанию (например, false в Java), но не в JavaScript.

0 голосов
/ 11 января 2019

Вы можете сделать это с помощью простой комбинации && и ||, без необходимости использования троичного оператора.

this.state.timeSlotItemSelected === null &&
    (this.state.quantityItemSelected === null || this.state.deliveryOptionSelected === null)

Это будет true, если this.state.timeSlotItemSelected равно нулю, и если один из this.state.quantityItemSelected или this.state.deliveryOptionSelected равен нулю, и false в противном случае.

Таблица истинности:

timeSlotItemSelected | quantityItemSelected | deliveryOptionSelected | Result
---------------------+----------------------+------------------------+-------
null                 | null                 | null                   | true
null                 | <not null>           | null                   | true
null                 | null                 | <not null>             | true
null                 | <not null>           | <not null>             | false
<not null>           | <anything>           | <anything>             | false

В этом случае вам не нужен троичный оператор, потому что само выражение вернет true или false: <Expression> ? true : false = <Expression>.

...