2017-06-05 2 views
1

Dire que j'ai une instruction switch qui prend une myData variable entre 1 et une valeur plus grande, à savoir 300.instruction switch fonctionnelle en Javascript

En fonction de la variable « code d'état », le résultat est la valeur du texte d'un autre variable. Par exemple, si myData == 1, je souhaite renvoyer la variable a appelée code1. Si myData == 300, je veux retourner la variable a appelé code300. Les variables Code1 et code300 stockent des chaînes non apparentées, c'est-à-dire "Ceci est un résumé", ou "Ceci est une note". Certains pseudo-codes ci-dessous:

var myData = statusCode; 

var code1 = "This is a summary"; 
var code300 = "This is a note"; 

switch(myData) { 
    case statusCode: 
     scriptletResult = returnCode("code", statusCode); // code1 if myData == 1 
     break;   
    default: 
     scriptletResult = code1; 
} 

function returnCode(code, statusCode) { 
    return code + statusCode; // Returns a variable "code1" if statusCode == 1 
} 

Comment puis-je faire fonctionner ceci?

+2

sont les variables 'codeX' tel quel, ou vous pouvez les déplacer dans un objet où le code est la clé? – Scott

+0

Ils sont tels quels, prédéfinis. – santafebound

+1

Ce que vous demandez est variable variables, ce qui ne fonctionne pas dans Javascript en tant que tel. La chose sensée est d'avoir un tableau ou un objet mappé de la clé à la valeur, donc vous pouvez faire un simple 'codes [myData]'. – deceze

Répondre

4

Vous souhaitez utiliser une carte de recherche pour que, au lieu de plusieurs variables:

var codes = { 
    1: "This is a summary", 
    300: "This is a note" 
}; 

Avec que vous pouvez faire

if (statusCode in codes) { 
    scriptletResult = codes[statusCode]; 
} else { 
    scriptletResult = codes[1]; 
} 
+1

C'est la meilleure solution, mais je crois que OP dit qu'il ne peut pas déplacer les variables pour une raison quelconque. – Scott

+0

Autant que je sache, c'est le plus proche de ce que je voudrais accomplir. Cela ne change rien au fait que quelqu'un devra écrire 300 chaînes de "codes", mais cela réduit le nombre d'instructions de commutation requises ... – santafebound

+1

@Scott Dans ce cas, 'var codes = {1: code1, 300: code300 } 'pourrait être une solution. Ou 'eval' avec une liste blanche (-regex) de noms de variables dans le pire des cas. – Bergi

1
var myData=300; 
var code1="This is a summary"; 
var code300=" this is a note"; 
var result=(function(){ 
switch(myData) { 
case 1: 
    return code1;   
case 300: 
    return code300, 
default: 
    return "not defined"; 
} 
})(); 

alert(result); 

Parfait pour une combinaison de commutateurs IIFE +.

Cependant mieux serait:

alert([code1,code2][myData]); 
+4

'['Ceci est un résumé', ...] [myData] || 'non défini' ... – deceze

+0

@deceze il voulait une * instruction switch * fonctionnelle. ne dit pas que c'est utile ... –

+5

Quelle que soit "déclaration de commutateur fonctionnel" signifie exactement ...: P – deceze

0
var yourStatusCode = 300; //function get300(); 
var data = "MyData"; //function data(); 

function runner(){ 
    switch(data){ 
     case "MyData": 
     myFunc(); 
     return "hola data we are looking for!"; 
     break; 
     case "DataNumberTwo": 
     return "this is data number 2"; 
     break; 
     default: 
     return "WOAH what data is this??"; 
     break; 
    } 

} 

console.log(runner()); 
1

La réponse de Bergi est la meilleure approche, mais je f vous ne pouvez pas changer la façon dont vos combos code messages sont stockés, et les variables sont globales, vous pouvez utiliser:

scriptletResult=window["code"+myData];