如何向表列添加对象名称

时间:2016-05-31 09:53:33

标签: javascript jquery json

我正在接收JSON数组,展平它以将其显示为表格,但我使用的这个逻辑有一个缺陷,如果我的对象具有相同的列名,它将忽略它并且只会添加它找到的第一列。

问题我正在尝试解决

将嵌套对象显示为平面表

问题我被困在

我想将对象的名称添加到列标题中,目前尚未发生。

http://image.prntscr.com/image/55ef0e49abd748d19b9f8c88bd5a8652.png

我认为问题在这里

  function flattenRecord(result, rec) {
    return Object.keys(rec).reduce(function(result, key) {
      var value = rec[key];
      if (value && typeof value === 'object')
        flattenRecord(result, value);
      else
        result[key] = value;  // How to add key here so that it will be added to column header ?
      return result;
    }, result);
  }

完整代码和工作示例

https://jsfiddle.net/1tsu6xt9/14/

1 个答案:

答案 0 :(得分:0)

我已经解决了这个问题,我不得不改变将JSON展平为可疑的逻辑,

将FlattenRecord方法更改为以下,

  function flattenRecord2(data) {
    var result = {};

    function recurse(cur, prop) {
      if (Object(cur) !== cur) {
        result[prop] = cur;
      } else if (Array.isArray(cur)) {
        for (var i = 0, l = cur.length; i < l; i++)
          recurse(cur[i], prop);
        //if (l == 0)
          //result[prop] = [];
      } else {
        var isEmpty = true;
        for (var p in cur) {
          isEmpty = false;
          recurse(cur[p], prop ? prop + "." + p : p);
        }
        if (isEmpty && prop)
          result[prop] = {};
      }
    }
    recurse(data, "");
    return result;
  }

以及后续行,

  var rows = testData.reduce(function(rows, row) {
    return appendRow(rows, flattenRecord2(row));
  }, []);