2017-06-05 119 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];