Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用JSON中的方法创建JS对象_Javascript_Jquery_Json - Fatal编程技术网

Javascript 使用JSON中的方法创建JS对象

Javascript 使用JSON中的方法创建JS对象,javascript,jquery,json,Javascript,Jquery,Json,我需要以下对象: var myObj={ "rules": { "email": { "required": true, "email": true, "remote": { "url": "check-email.php", "type": "post", "data": {

我需要以下对象:

var myObj={
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": function() {
                        return $( '#someID1' ).val();
                    },             
                    "someName2": function() {
                        return $( '#someID2' ).val();
                    },             
                    "someName3": "bla"
                }
            }
        }
    }
};
要创建它,我只有一些JSON,例如:

{
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": {"id":"someID1"},             
                    "someName2": {"id":"someID2"},             
                    "someName3": "bla"
                }
            }
        }
    }
}

或者类似的东西

如何实现这一点?

对于此模式:

{
    "rules": {
        "email": {
            "required": true,
            "email": true,
            "remote": {
                "url": "check-email.php",
                "type": "post",
                "data": {
                    "someName1": {"id":"someID1"},             
                    "someName2": {"id":"someID2"},             
                    "someName3": "bla"
                }
            }
        }
    }
}
可以这样做:

for(var key in myObj.rules.email.remote.data){
    if(myObj.rules.email.remote.data[key].id){
    myObj.rules.email.remote.data[key] = function(){
          return $('#'+myObj.rules.email.remote.data[key].id).val();
        }
    }
}
for(var key1 in myObj.rules){
 for(var key in myObj.rules[key1].remote.data){
        if(myObj.rules[key1].remote.data[key].id){
        myObj.rules[key1].remote.data[key] = function(){
              return $('#'+myObj.rules[key1].remote.data[key].id).val();
            }
        }
    }
}
如果电子邮件未硬编码,则可以按以下方式进行:

for(var key in myObj.rules.email.remote.data){
    if(myObj.rules.email.remote.data[key].id){
    myObj.rules.email.remote.data[key] = function(){
          return $('#'+myObj.rules.email.remote.data[key].id).val();
        }
    }
}
for(var key1 in myObj.rules){
 for(var key in myObj.rules[key1].remote.data){
        if(myObj.rules[key1].remote.data[key].id){
        myObj.rules[key1].remote.data[key] = function(){
              return $('#'+myObj.rules[key1].remote.data[key].id).val();
            }
        }
    }
}

您可以使用
Function
动态创建函数。假设您有第二个JSON结构:

d = obj.rules.email.remote.data;
Object.keys(d).forEach(function(key) {
    d[key] = new Function(d[key].function); 
    //Note: You might want to check if d[key].function exists before using it.
});

我的缺点是没有更具体。如果
电子邮件
不能硬编码,并且任何具有类似模式的邮件都会发生这种情况,该怎么办?模式是
*.rules.*.remote.data
。谢谢Gaurav,让我试试。谢谢
console.log
甚至在转换之前就将
规则、电子邮件、远程、数据、someName1
显示为一个函数???仍在测试中。谢谢不起作用:。但随后更改为声明
id
是一个变量,它确实是:。你知道为什么会有差异吗?实际上,后面的示例仍然不起作用,因为它总是返回最后一个的值(即将返回
#someID2
中的值)。谢谢。我会测试一下,也可以。或者不创建新变量。请注意,我无法将
函数
用作属性名。