Скажем, у меня есть оператор switch, который принимает переменную myData между 1 и некоторым большим значением, то есть 300.
В зависимости от переменной "status code" результатом является текстовое значение другой переменной. Например, если myData == 1
, я хочу вернуть переменную с именем code1
. Если myData == 300
, я хочу вернуть переменную с именем code300
. Переменные Code1 и code300 хранят несвязанные строки, то есть "Это сводка", или "Это примечание". Ниже приведен код под псевдонимом:
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
}
Как я могу заставить это работать?
Для этого вам понадобится карта поиска, а не несколько переменных:
var codes = {
1: "This is a summary",
300: "This is a note"
};
С этим вы можете сделать
if (statusCode in codes) {
scriptletResult = codes[statusCode];
} else {
scriptletResult = codes[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);
Идеальная утилита для коммутатора IIFE +.
Однако лучше всего:
alert([code1,code2][myData]);
['This is a summary', ...][myData] || 'not defined'
…
Ответ @Bergi - лучший подход, но если вы не можете изменить способ комбо-комбо-сообщений, а переменные - глобальные, вы можете использовать:
scriptletResult=window["code"+myData];
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());