我正在接收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);
}
完整代码和工作示例
答案 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));
}, []);