2016-05-31 132 views
1

我正在接收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/

+0

我猜你正在尋找一種方式來拉平和unflatten對象。 [喜歡這個圖書館](https://github.com/hughsk/flat)。 – Sheepy

+0

https://jsfiddle.net/1tsu6xt9/20/ Line#56 Lol:D – cswl

+0

@cswl我的JSON數據是動態的,所以我不能硬編碼密鑰,否則會很容易;) – Mathematics

回答

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)); 
    }, []);