2016-11-24 61 views
0

我有我的數據如下:如何將結構基於數組的基礎上將模型映射到表?

{ 
    meta: { 
       format: "csv", 
       info: "desc", 
       columns: [ 
       { 
        id: "Name", 
        type: "Text", 
        length: 32   
       }, 
       { 
        id: "Text", 
        type: "Text", 
        length: 128 
       }] 
      }, 
    rows: [ 
       ["John","xxxx"], 
       ["Alpha","yyyy"], 
       ["Beta","wwww"], 
       ["Gamma","zzzz"]] 
} 

現在,我很努力的記錄,以一個Table控制映射爲ColumnsRows。列看起來直線前進,直線地圖,但由於缺少列映射,我想知道什麼可能是最簡單的方法。

方法步驟:

  1. 從每列記錄的column.id做一個keys[]
  2. 遍歷rows[]
  3. 每個循環,而keys.length創建一個對象爲{keys[j]:row[k]}
  4. 推到一個數組
  5. 重建原始JSONObjects

我真的很掙扎,以取代Rows陣列在rows[]解析和創建對象專門將其轉換爲代碼。是否有,我確定必須有一個有效的方法來實現這一點。

回答

1

這是你可以做的。使用Array.map和forEach。

var input = { 
 
    meta: { 
 
    format: "csv", 
 
    info: "desc", 
 
    columns: [{ 
 
     id: "Name", 
 
     type: "Text", 
 
     length: 32 
 
    }, { 
 
     id: "Text", 
 
     type: "Text", 
 
     length: 128 
 
    }] 
 
    }, 
 
    rows: [ 
 
    ["John", "xxxx"], 
 
    ["Alpha", "yyyy"], 
 
    ["Beta", "wwww"], 
 
    ["Gamma", "zzzz"] 
 
    ] 
 
}; 
 

 

 
var columns = input.meta.columns.map((column) => { 
 
    return column.id 
 
}); 
 

 

 
var rows = input.rows.map((row) => { 
 
    var obj = {}; 
 
    row.forEach((column, idx) => { 
 
    obj[columns[idx]] = column; 
 
    }); 
 
    return obj; 
 
}); 
 

 
input.rows = rows; 
 
console.log(input);

+0

許多感謝您的答覆。這個解決方案完全可以實現預期的效果。雖然,我的問題更多的是想知道是否有任何聰明的方式在SAPUI5數據綁定中執行相同的操作,而無需預處理數據。但如果這是不可能的,我會將其標記爲正確的答案。 – axiomtheorem

+0

我根本就沒有sapui5的專家。如果在SAPUI中有更好的方法,我無法回答。但是,一般來說,您需要有一臺變壓器才能將一個結構轉換爲另一個結構。它可以在服務器/客戶端。 – Sreekanth

相關問題