2017-08-02 57 views
1

我想拿出一些格式如下:问题创建一个对象发送到API

"hours":{ 
     "<default>":{ 
     "mon_open_close":[...], 
     "tue_open_close":[...], 
     "wed_open_close":[...], 
     "thu_open_close":[...], 
     "fri_open_close":[...], 
     "sat_open_close":[...], 
     "sun_open_close":[...], 
     } 
    } 

我有很多这样的(一个星期的每一天)定义的变量:

var wed_open_close_hours = [operationTime[2].timeFrom+'-'+operationTime[2].timeTill]; 

能产生类似:[10:00-16:00]

再有这样的数组:

$all_hours_text = ['mon_open_close', 'tues_open_close' ,'wed_open_close' , 'thu_open_close' , 'fri_open_close' , 'sat_open_close' ,'sun_open_close']; 

我遇到的问题是如何将它们放在一起并创建这个单个对象。有人能指引我朝着正确的方向吗?

+0

循环,使用'的eval()'从相关变量得到的名称和'unknown_var.hours把它放在一起[“default”] [value] = eval(value +“hours”)'。但这是一个非常肮脏的方式。我建议改变整个文件结构,以便它们更好地融合在一起。 – Spingolini

+0

*“'[10:00-16:00]'”* - 数组总是只有一个元素的点是什么?无论如何,*不要*在每周的每一天使用单个变量,首先在对象中使用属性。 – nnnnnn

回答

1

所以,如果你设置

var wed_open_close_hours = [operationTime[2].timeFrom+'-'+operationTime[2].timeTill]; 
在全球范围内

,它也将作为

window.wed_open_close_hours; 

否则,它可如果你不喜欢的东西的eval( “wed_open_close_hours”); 所以,你可以做

all_hours_text.map(function(varname) { 
     if(window[varname+"_hours"]) { 

      result["hours"]["<default>"][varname] = window[varname+"_hours"]; 
     } 
}) 

all_hours_text.map(function(varname) { 

      result["hours"]["<default>"][varname] = eval(varname+"_hours"); 

}) 

然而,在全球范围内也没有设置变量使用eval被推荐的做法。你真的应该考虑代码因子分解,来是这样的:通过`$ all_hours_text`阵列

var output = {} 
output.hours = {} 
output.hours["<default>"] = {} 

.,.. 
output.hours["<default>"].wed_open_close = [operationTime[2].timeFrom+'-'+operationTime[2].timeTill];