使用JSON中的方法创建JS对象
我需要以下对象:
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": {"function":"return $( '#someID1' ).val()"}, "someName2": {"function":"return $( '#someID2' ).val()"}, "someName3": "bla" } } } } }
或类似的东西。
如何实现这一目标?
您可以使用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": { "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(); } } } }