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).