2017-06-05 120 views
1

说我有一个开关语句要花1和一些较大的值之间的变量myData的,即300功能switch语句在Javascript

根据“身份码”变量,其结果是他人的文本值变量。例如,如果myData == 1,我想返回一个名为code1的变量。如果myData == 300,我想返回一个名为code300的变量。 Code1和Code300变量存储不相关的字符串,即“This is a summary”或“This is a note”。一些伪代码如下:

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 
} 

我该如何得到这个工作?

+2

是'codeX'变量 - 是,也可以将它们移动到一个对象密码在哪里? – Scott

+0

它们是按原样预先定义的。 – santafebound

+1

你要求的是变量变量,这在Javascript中不起作用。理智的是有一个从键到值的数组或对象映射,所以你可以做一个简单的'codes [myData]'。 – deceze

回答

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说他出于某种原因不能移动变量。 – Scott

+0

据我所知,这是最接近我想要完成的。这不会改变人们必须编写300个“代码”字符串的事实,但它确实减少了所需的switch语句的数量...... – santafebound

+1

@Scott在这种情况下,'var codes = {1:code1,300:code300 }'可能是一个解决方案。或在最坏的情况下将'eval'与变量名称的白名单(-regex)进行比较。 – 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); 

完美的用于IIFE +开关组合的组合。

但是最好的是:

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

'['这是一个摘要',...] [myData] || 'not defined'' ... – deceze

+0

@deceze他想要一个*功能开关语句*。并不是说这是有用的...... –

+5

无论“功能切换语句”的含义如何...: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

@ Bergi的答案是最好的办法,但我F你不能改变你的代码的消息连击的存储方式和变量是全局变量,你可以使用:

scriptletResult=window["code"+myData];