将JavaScript函数内部的javascript数组转换为json并返回

时间:2015-09-08 20:19:34

标签: javascript json

我有一个包含函数的JavaScript数组/对象,例如

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

如何将此数组转换为JSON并返回可用的JavaScript代码?

我应该使用eval还是预先创建这些函数,然后使用window["functionname"]

加载它们

1 个答案:

答案 0 :(得分: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');