从Javascript中的字符串生成函数

Sve*_*ven 2 javascript string jquery loops function

我正在使用jQuery从xml文件中获取数据并将其保存为字符串.字符串是一个switch语句,我想成为一个函数.

$.get('type.xml', function(xml) {
var cases=[];
$(xml).find('type').each(function(){
    index=parseInt($(this).find('earn').text());
    if($.isArray(cases[index])){
        cases[index].push($(this).find('name').text());
    }else{
        arr=$.makeArray($(this).find('name').text());
        cases[index]=arr;
    }
});
var autoearn="function(x){switch(x){";
for(i=0;i<=100;i+=5){
    if($.isArray(cases[i])){
        $.each(cases[i], function(index,v){
            autoearn+='case "'+v+'":';
        });
        autoearn+='$("input[name^=\'earn\']").val('+i+');break;';
}}
autoearn+='}}';
});
Run Code Online (Sandbox Code Playgroud)

第一部分创建一个2D数组,通过索引将一组案例与其结果输出相关联.因此,收入10美元(例如会议)的东西将被存储在案例[10]中(会议=案例[10] [0]).

第二部分写了一个字符串,将一个put放入一个看起来像这样的switch语句:

function(x){    
    switch(x){
        case "Meeting":
            $("input[name^='earn']").val(10);
            break;
        case "Event1":
        case "Event2":
            $("input[name^='earn']").val(20);
            break;
    }
}
Run Code Online (Sandbox Code Playgroud)

请注意,switch case的语法使Event1和Event2具有相同的结果.

现在autoearn只是一个包含我想要的函数代码的字符串.怎么做成功能?有一个更好的方法吗?我想送它通过PHP返回回jQuery的,但是这整个事情似乎真的间接的,有可能是一个更简单的方法来做到这一点.

cas*_*nca 5

首先,确保字符串中的代码是可信的,否则您将通过执行任意代码遇到问题.

您可以从字符串创建函数,如下所示:

var f = new Function('arg1', 'arg2', ..., 'function code');
Run Code Online (Sandbox Code Playgroud)

以上相当于:

function f(arg1, arg2, ...) {
  function code
}
Run Code Online (Sandbox Code Playgroud)

在您的情况下,您可能希望function(x)autoearn字符串中删除和打开/关闭大括号,并创建如下函数:

new Function('x', autoearn)
Run Code Online (Sandbox Code Playgroud)