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?
3 Réponses :
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
:
=
.
(this.state.timeSlotItemSelected === null && this.state.quantityItemSelected === null) || (this.state.deliveryOptionSelected === null && this.state.timeSlotItemSelected === null)? vrai: faux
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.
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!
voulez-vous vraiment vérifier
null
? quelles autres valeurs avez-vous?