【发布时间】:2019-01-05 19:40:42
【问题描述】:
这是树的基本结构:
{
"DescId" : "1",
"Desc" : "Parent 1",
"ParentId" : "null",
"Order" : 1.0,
"Type" : "A",
"Parent" : null,
"Depth" : 0.0
}
{
"DescId" : "1.1",
"Desc" : "Child 1",
"ParentId" : "1",
"Order" : 1.0,
"Type" : "B",
"Parent" : "Parent 1",
"Depth" : 1.0
}
{
"DescId" : "1.2",
"Desc" : "Child 2",
"ParentId" : "1",
"Order" : 2.0,
"Type" : "B",
"Parent" : "Parent 1",
"Depth" : 1.0
}
{
"DescId" : "1.1.1",
"Desc" : "Grand Child 1",
"ParentId" : "1.1",
"Order" : 1.0,
"Type" : "C",
"Parent" : "Child 1",
"Depth" : 2.0
}
{
"DescId" : "1.1.1.1",
"Desc" : "Great Grand Child 1",
"ParentId" : "1.1.1",
"Order" : 1.0,
"Type" : "D",
"Parent" : "Grand Child 1",
"Depth" : 3.0
}
{
"DescId" : "2",
"Desc" : "Parent 2",
"ParentId" : null,
"Order" : 2.0,
"Type" : "A",
"Parent" : null,
"Depth" : 0.0
}
我有这个分层的 json 数据如下:
[
{
"DescId": "1",
"Desc": "Parent 1",
"Type": "A",
"children": [
{
"DescId": "1.2",
"Desc": "Child 2",
"ParentId": "1",
"Order": 2,
"Type": "B",
"Parent": "Parent 1",
"Depth": 1
},
{
"DescId": "1.1",
"Desc": "Child 1",
"ParentId": "1",
"Order": 1,
"Type": "B",
"Parent": "Parent 1",
"Depth": 1
}
]
},
{
"DescId": "1.1",
"Desc": "Child 1",
"Type": "B",
"children": [
{
"DescId": "1.1.1",
"Desc": "Grand Child 1",
"ParentId": "1.1",
"Order": 1,
"Type": "C",
"Parent": "Child 1",
"Depth": 2
}
]
},
{
"DescId": "1.2",
"Desc": "Child 2",
"Type": "B",
"children": []
},
{
"DescId": "1.1.1",
"Desc": "Grand Child 1",
"Type": "Consequence",
"children": [
{
"DescId": "1.1.1.1",
"Desc": "Great Grand Child 1",
"ParentId": "1.1.1",
"Order": 1.0,
"Type": "D",
"Parent": "Grand Child 1",
"Depth": 3.0
}
]
},
{
"DescId": "1.1.1.1",
"Desc": "Great Grand Child 1",
"Type": "D",
"children": []
},
{
"DescId": "2",
"Desc": "Parent 2",
"Type": "A",
"children": []
}
]
我有这个要求,我需要将此分层树显示为表格结构。
所以数据需要如下:
[
{
"A" + "DescId" : "1",
"A" + "Desc" : "Parent",
"B" + "DescId" : "1.1",
"B" + "Desc" : "Child 1,
"C" + "DescId" : "1.1.1",
"C" + "Desc" : "Grand Child 1"
"D" + "DescId" : "1.1.1.1",
"D" + "Desc" : "Great Grand child 1"
},
{
"A" + "DescId" : "1",
"A" + "Desc" : "Parent 1",
"B" + "DescId" : "1.2"
"B" + "Desc" : "Child 2
//if there are any further generations like 1.2.1 or 1.2.1.1 should be present here
},
{
"A" + "DescId" : "2",
"A" + "Desc" : "Parent 2"
}
]
我已经在 javascript 和 lodash 中尝试过以下代码:
function reformatData(sentData) {
var finalData = {};
var returnArray = [];
if (sentData.length > 0) {
var propertyNameArray = Object.keys(sentData[0]);
for (var i = 0; i < sentData.length; i++) {
var type = sentData[i].Type;
finalData[type + propertyNameArray[0]] = sentData[i].DescId;
finalData[type + propertyNameArray[1]] = sentData[i].Desc;
if (sentData[i].children && sentData[i].children.length > 0) {
var children = _.orderBy(sentData[i].children, ['Order'], ['asc']);
reformatData(children);
}
}
}
returnArray.push(finalData);
return returnArray;
}
上面的代码忽略了第一个父级,只添加了下一个可用的父级。谁能帮我指出我在这里缺少的东西。以下是正在生成的输出代码:
[
{
"ADescid":"2",
"ADesc":"Parent 2",
"BDescid":"1.2",
"BDesc":"Child 2",
"CDescid":"1.1.1",
"CDesc":"Grand Child 1",
"DDescid":"1.1.1.1",
"DDesc":"Great grand child 1"
}
]
【问题讨论】:
-
所以你想得到树的每条路径,对吧?
-
是的,作为数组的不同对象。
标签: javascript arrays json mongodb lodash