2016-04-21 52 views
1

我是相當新的操縱和編寫JSON對象等,我有這個任務dynaimcally基於用戶輸入創建JSON對象。我已設法在1級創建的對象,但我想在對象內嵌入的對象,這是所需的輸出試圖嵌套動態生成的基於用戶輸入JavaScript的JSON

// desired output 

masterObj = [ 
    { 
    "Market1": { 
     "Size1": { 
     "id": 1, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size2": { 
     "id": 2, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size3": { 
     "id": 3, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size4": { 
     "id": 4, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size5": { 
     "id": 5, 
     "reporting_label": "a", 
     ... 
     } 
    }, 
    "Market2": {...}, 
    "Market3": {...}, 
    "Market4": {...} 

    } 
] 

我試圖使用推送功能對我masterObj,然後在for循環推將所需的對象放入每個市場的masterObj的子項中。但是,所有我能到是有在同一水平(即9個對象)的所有對象,已經開始轉圈圈現在正試圖解決這個...

var masterObj = [{ 

}]; 

var requested = [ 
    { 
    "Markets": { 
     // boolean values defined by checkboxes 
     "Market1": show_m1, "Market2": show_m2, "Market3": show_m3, "Market4": show_m4 
     }, 
    "Sizes": { 
     // boolean values defined by checkboxes 
     "Size1": show_s1, "Size2": show_s2, "Size3": show_s3, "Size4": show_s4, "Size5": show_s5 
    } 
    } 
] 

for (var item of requested) { 

    if(item.Markets.Market1 === true) { 
    var m1Obj = {Market1: {}} 
    masterObj.push(m1Obj); 

    if(item.Sizes.Size1 === true) { 
     var s1Obj = { 
     Size1: {} 
     } 
     masterObj.push(s1Obj); 
    } 
    if(item.Sizes.Size2 === true) { 
     var s2Obj = { 
     Size2: {} 
     } 
     sgObj.push(s2Obj); 
    } 
    if(item.Sizes.Size3 === true) { 
     var s3Obj = { 
     Size3: {} 
     } 
     sgObj.push(s3Obj); 
    } 
    if(item.Sizes.Size4 === true) { 
     var s4Obj = { 
     Size4: {} 
     } 
     masterObj.push(s4Obj); 
    } 
    if(item.Sizes.Size5 === true) { 
     var s5Obj = { 
     Size5: {} 
     } 
     masterObj.push(s5Obj); 
    } 
    } 

    if(item.Markets.Market2 === true) { 
    var m2Obj = { 
     Market2: {} 
    } 
    // ouput each requested size 
    masterObj.push(m2Obj); 
    } 
    if(item.Markets.Market3 === true) { 
    var m3Obj = { 
     Market3: {} 
    } 
    // ouput each requested size 
    masterObj.push(m3Obj); 
    } 
    if(item.Markets.Market4 === true) { 
    var m4Obj = { 
     Market4: {} 
    } 
    // ouput each requested size 
    masterObj.push(m4Obj); 
    } 
} 

console.log(masterObj); 

任何幫助,這將是驚人的,在我的頭我相信我接近解決方案,但目前它逃避我!

回答

0

推送不會起作用,因爲你的對象有一個元素的數組..這是一個object不是array

masterObj = [ { ... } ] 

更可能你的意思是有這樣的一個結構的:

masterObj = { 
    "Market1": { 
     "Size1": { 
     "id": 1, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size2": { 
     "id": 2, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size3": { 
     "id": 3, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size4": { 
     "id": 4, 
     "reporting_label": "a", 
     ... 
     }, 
     "Size5": { 
     "id": 5, 
     "reporting_label": "a", 
     ... 
     } 
    }, 
    "Market2": {...}, 
    "Market3": {...}, 
    "Market4": {...} 

    } 

,你可以接着用

masterObj.Market7 = {...}; 

或訪問,如果你需要通過一個變量來訪問:

key = 'Market7'; 
masterObj[key] = {...}; 

編輯:注:JSONS無關這個問題。你正在處理直線對象和數組。 JSON僅當您將此對象序列化/反序列化爲字符串時才適用 - 通常用於存儲或傳輸。

+0

感謝會給這個一展身手,數據將在稍後成爲JSON當我將它保存到一個文件,但你是正確的,現在它不是JSON :) – iamleeadamson

+0

我知道我似乎害蟲的指點這一點,但我看到了由JSON與JavaScript代碼混淆造成的太多問題。 –

0

隨着一點重組,這是我已經結束的代碼,我現在正在得到我所需要的。

謝謝傑里米指着我在正確的方向。

var requestedMarkets = [ 
    {market: "Market1", display: show_m1, name: "m1"}, 
    {market: "Market2", display: show_m2, name: "m2"}, 
    {market: "Market3", display: show_m3, name: "m3"}, 
    {market: "Market4", display: show_m4, name: "m4"} 
]; 
var requestedSizes = [ 
    {display: show_s1, size: '100x200', name: "S1"}, 
    {display: show_s2, size: '100x300', name: "S2"}, 
    {display: show_s3, size: '100x400', name: "S3"}, 
    {display: show_s4, size: '100x500', name: "S4"}, 
    {display: show_s5, size: '100x600', name: "S5"} 
]; 

for (let item of requestedMarkets) { 

    if(item.display === true) { 
    masterObj[item.market] = {}; 

    for (let size of requestedSizes) { 

     var settings = { 
     id: uniqueID, 
     ... 
     } 

     if(size.display === true) { 
     masterObj[item.market][size.name] = settings; 
     } 

    } 

    } 
} 

console.log(masterObj);