2015-09-08 47 views
1

我有包含功能,例如轉換與JavaScript函數JavaScript數組裏面JSON和背部

var map = [function(){ alert('test') }, function(){ alert('test2') }];

我怎麼會這個數組轉換成JSON並返回到可用的JavaScript代碼JavaScript數組/對象?

我應該使用eval或預創建這些功能,然後使用window["functionname"]

+1

FYI:如果你有一個數組的內部函數,它不能是JSON。 – epascarello

+0

@epascarello是的,我知道,這就是爲什麼我試圖找到一種方法來將其轉換爲JSON,如將其轉換爲字符串,然後將其轉換回可執行的JavaScript –

+0

爲什麼你需要它作爲字符串/ JSON? – epascarello

回答

1

這裏有一個方法,你可以做到這一點加載它們。

對於轉換成JSON,你可以這樣做:

//your original map 
var map = [function(){ alert('test') }, function(){ alert('test2') }]; 
//convert it to a string 
var str = map.toString(); 
//add the string to a javascript object 
var obj = {funcArrStr: str}; 
//convert that object to json 
var json = JSON.stringify(obj); 

然後進行解析,你可以這樣做:

var json = /* get json from server side */; 
//parse the json 
var parsed = JSON.parse(json); 
//pull out the string from the parsed object 
var funcArrStr = parsed.funcArrStr; 
//wrap it in brackets [] and eval it to convert back to array 
var evaled = eval('[' + parsed.funcArrStr + ']'); 

運行下面的代碼片段,並檢查您的瀏覽器的JavaScript控制檯演示。

var map = [function(){ alert('test') }, function(){ alert('test2') }]; 
 
console.log('map:'); 
 
console.log(map); 
 

 
var str = map.toString(); 
 
console.log('convert map to string:'); 
 
console.log(str); 
 

 
var obj = {funcArrStr: str}; 
 
console.log('put it in an object:'); 
 
console.log(obj); 
 

 
var json = JSON.stringify(obj); 
 
console.log('convert to json string:'); 
 
console.log(json); 
 

 
var parsed = JSON.parse(json); 
 
console.log('parse json string:'); 
 
console.log(parsed); 
 

 
var funcArrStr = parsed.funcArrStr; 
 
console.log('pull out string from object'); 
 
console.log(funcArrStr); 
 

 
var evaled = eval('[' + parsed.funcArrStr + ']'); 
 
console.log('wrap in [] and eval:'); 
 
console.log(evaled);

編輯迴應評論

怎樣的eval影響我的JavaScript速度如果我可以說包含了幾百功能的陣列?

測試一下。分配字符串,調用eval來創建函數數組,並在下面代碼片段中的300多個函數上調用eval通常在我的瀏覽器中需要大約2毫秒。如果你有更大的功能,它很可能需要更長的時間,但是測試一下並計算它的時間,看看加載時間是否合理。

var start = new Date().getMilliseconds(); 
 

 
var funcStr = "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }," + 
 
    "function() { alert(test); }"; 
 

 
var functions = eval('[' + funcStr + ']'); 
 

 
for (var i = 0; i < functions.length; i++) { 
 
    eval(functions[i]); 
 
} 
 
var end = new Date().getMilliseconds(); 
 
alert('Evals complete in ' + (end-start) + ' milliseconds');

+0

這工作真的很酷,但如果我可以說一個數組包含幾百個函數,eval會如何影響我的JavaScript速度? –

+0

哦,這真棒,它在我的工作很好,謝謝! –