1
votes

Comment exécuter une instruction ternaire pour 3 conditions avec une condition par défaut

Est-il possible d'effectuer un ternaire pour 3 conditions mais avec une condition par défaut?

Voici mon code:

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

Dans ceci, this.state .timeSlotItemSelected est la valeur par défaut. Ce dont j'ai besoin, c'est chaque fois que this.state.timeSlotItemSelected et this.state.quantityItemSelected sont nuls, le résultat doit être true , et chaque fois que this.state.timeSlotItemSelected et this.state.deliveryOptionSelected sont nuls, alors il devrait également être true . Sinon, il devrait être faux.

Comment puis-je effectuer cela pour les deux conditions?


1 commentaires

voulez-vous vraiment vérifier null ? quelles autres valeurs avez-vous?


3 Réponses :


3
votes

Vous pouvez le faire avec une simple combinaison de && et || , sans avoir besoin du tout de l'opérateur ternaire.

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

Ce sera true si this.state.timeSlotItemSelected est nul, et si l'un des éléments this.state.quantityItemSelected ou this.state.deliveryOptionSelected est nul, et false sinon.

Table de vérité:

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

Vous faites pas besoin de l'opérateur ternaire dans ce cas, car l'expression elle-même retournera true ou false : ? vrai: faux = .


0 commentaires

0
votes

(this.state.timeSlotItemSelected === null && this.state.quantityItemSelected === null) || (this.state.deliveryOptionSelected === null && this.state.timeSlotItemSelected === null)? vrai: faux


0 commentaires

0
votes

Ceci est une algèbre booléenne (j'utiliserai probablement les mauvais mots, j'ai appris les mathématiques en allemand, donc les modifications ou commentaires sont appréciés):

Commençons par vos conditions verbales traduites en JavaScript (j'ai supprimé this.state pour une meilleure lisibilité):

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

Nous pouvons prendre en compte timeSlotItemSelected , donc cela ressemble à ceci:

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

Vous pouvez maintenant l'utiliser dans une clause if ou un opérateur ternaire.

Concernant votre question pour une "condition par défaut":

Il n'y a littéralement aucun moyen d'avoir une valeur par défaut lorsque vous travaillez avec des booléens, ils sont soit vrai soit faux.

Cela signifie: Si une clause if ou un opérateur ternaire ont un booléen en entrée (qu'ils ont en JavaScript et dans la plupart des autres langages), ils ne peuvent pas avoir de troisième cas pour une valeur par défaut, car un booléen ne peut être que vrai ou faux.

Une variable de type boolean peut avoir une valeur par défaut (par exemple, false en Java), mais pas en JavaScript.


3 commentaires

Je me demande si par "condition par défaut", ils signifient qu'une condition s'applique aux deux cas de test. Donc pour D = default , nous avons D ∧ A => X; D ∧ B => Y; else => Z , où en quelque sorte la casse par défaut est prise en compte comme; quelque chose comme D ∧ (A => X; B => Y); else => Z . Dans Lisp / Scheme, vous pourriez avoir (cond-default D (A X ...) (B Y ...) (else Z ...)) .


Merci pour la réponse et heureux que cela ait fonctionné parfaitement @Daniel


ya votre droit @BillyBrown, j'ai mentionné le défaut dans le sens, cette première condition s'applique pour les deux cas!