Je viens du monde Ruby et je suis entré dans le monde JavaScript. Une caractéristique du langage Ruby est les instructions case
pour évaluer une valeur cible:
let myVal = null; switch (myVar) { case "var1": myVal = "value1"; break; case "var2": myVal = "value2"; break; default: myVal = "value3"; } // my_val evaluated to a specific value console.log(myVal);
Puis-je faire quelque chose d'aussi succinct en JavaScript que ci-dessus? C'est le plus proche que j'obtiens:
my_val = case my_var when "var1" then "value1" when "var2" then "value2" else "value3" end # my_val evaluated to a specific value puts my_val
4 Réponses :
Votre code fonctionne:
const obj = { var1: 'value1', var2: 'value2', default: 'value3' }; const myVar = 'var1'; const myVal1 = obj[myVar] || obj.default; const myVal2 = obj['asdfasdf'] || obj.default; console.log(myVal1); console.log(myVal2);
Mais un meilleur moyen sans l'instruction switch
:
let myVal = null; let myVar = 'var1'; switch (myVar) { case "var1": myVal = "value1"; break; case "var2": myVal = "value2"; break; default: myVal = "value3"; } // my_val evaluated to a specific value console.log(myVal);
Juste une remarque sur la deuxième approche: si certains des éléments var1
, var2
, ... sont définis avec une valeur falsy
(exemple < code> 0 ) dans l'objet, vous obtiendrez la valeur par défaut au lieu de celle définie falsy
.
@Shidersz vous avez raison .. J'ai implémenté comme ça parce que j'utilise normalement TypeScript et comme vous pouvez le voir les var1
, var2
sont des string
s .. Mais oui, tout à fait d'accord avec vous .. Merci
Vous pouvez utiliser un objet avec un ternaire pour définir une valeur par défaut comme ceci:
const obj = { "var1":"value1", "var2":"value2", "defaultVal": "value3" // default value }, getVal = sVar => sVar in obj ? obj[sVar] : obj["defaultVal"]; // Use case 1: console.log(getVal("var1")); // get "var1" from the object // Use case 2: console.log(getVal("foo")); // get "foo" from the object, doesn't exsist, so we get the default value
Ce qui précède crée un objet, où chaque clé de l'objet pointe vers une valeur (c'est-à-dire en quoi myVar
devrait se transformer). Si myVar
n'est pas dans l'objet, il sera par défaut defaultVal
, s'il est dans l'objet, il récupérera la valeur associée.
"case statement" - c'est en fait une expression .
Je veux juste souligner que cela fonctionne dans Coffeescript tout comme dans Ruby.
@maxpleaner Oui, je le sais aussi. Car coffeescript va de pair avec Rails. Mais il semble que coffeescript ne soit pas si populaire sur le développement frontend (React).