2017-08-02 91 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];