Оператор переключателя в Javascript

1

Скажем, у меня есть оператор 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
}

Как я могу заставить это работать?

Теги:
switch-statement

4 ответа

4
Лучший ответ

Для этого вам понадобится карта поиска, а не несколько переменных:

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

С этим вы можете сделать

if (statusCode in codes) {
    scriptletResult = codes[statusCode];
} else {
    scriptletResult = codes[1];
}
  • 1
    Это лучшее решение, но я считаю, что OP говорит, что по какой-то причине он не может переместить переменные.
  • 0
    Насколько я могу судить, это самое близкое к тому, чего я хотел бы достичь. Это не меняет того факта, что кому-то придется писать 300 строк «кодов», но уменьшает количество требуемых операторов switch ...
Показать ещё 1 комментарий
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]);
  • 4
    ['This is a summary', ...][myData] || 'not defined'
  • 0
    @deceze он хотел функциональное переключение операторов . не говорю, что это полезно ...
Показать ещё 1 комментарий
1

Ответ @Bergi - лучший подход, но если вы не можете изменить способ комбо-комбо-сообщений, а переменные - глобальные, вы можете использовать:

scriptletResult=window["code"+myData];
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());

Ещё вопросы

Сообщество Overcoder
Наверх
Меню