当结构基于数组时,如何将模型映射到表?

时间:2016-11-24 19:38:01

标签: javascript json multidimensional-array sapui5

我的数据如下:

{
    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. 从每列记录的keys[]创建column.id
  2. 遍历rows[]
  3. 每个循环,而keys.length创建一个对象{keys[j]:row[k]}
  4. 推送到数组
  5. 重新创建原始JSON,但将Rows数组替换为Objects
  6. 我真的很难将其转换为代码,特别是在rows[]解析和创建对象时。是的,我相信必须有一种有效的方法来实现这一目标。

1 个答案:

答案 0 :(得分: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);