我有一个需要遍历的对象数组,随着深度的变化,我需要在每个节点上分配一个treeLevel属性。 我创建了以下plunker,https://plnkr.co/edit/wou4Vj?p=info 我已经想出了旅行部分,但我无法了解如何在每个节点上分配treeLevels。旅行嵌套对象并从中构建一个平面对象
sampleInput = [
{
sectorName: 'a',
sectorType: 'a',
sectors: [
{
sectorName: 'a-a1',
sectorType: 'a-a1',
sectors: [
{
sectorName: 'a-a1-a1',
sectorType: 'a-a1-a1',
},
{
sectorName: 'a-a1-a2',
sectorType: 'a-a1-a2',
},
{
sectorName: 'a-a1-a3',
sectorType: 'a-a1-a3',
}
]
},
{
sectorName: 'a-a2',
sectorType: 'a-a2',
},
{
sectorName: 'a-a3',
sectorType: 'a-a3',
sectors: [
{
sectorName: 'a-a3-a1',
sectorType: 'a-a3-a1',
sectors: [
{
sectorName: 'a-a3-a1-a1',
sectorType: 'a-a3-a1-a1',
}
]
}
]
}
]
},
{
sectorName: 'b',
sectorType: 'b',
},
{
sectorName: 'c',
sectorType: 'c',
sectors: [
{
sectorName: 'c-c1',
sectorType: 'c-c2',
}
]
}
];
下面是我所期待的输出,
"[
{"sectorName":"a","sectorType":"a","$$treeLevel":0},
{"sectorName":"a-a1","sectorType":"a-a1","$$treeLevel":1},
{"sectorName":"a-a1-a1","sectorType":"a-a1-a1","$$treeLevel":0},
{"sectorName":"a-a1-a2","sectorType":"a-a1-a2","$$treeLevel":0},
{"sectorName":"a-a1-a3","sectorType":"a-a1-a3","$$treeLevel":0},
{"sectorName":"a-a2","sectorType":"a-a2","$$treeLevel":0},
{"sectorName":"a-a3","sectorType":"a-a3","$$treeLevel":1},
{"sectorName":"a-a3-a1","sectorType":"a-a3-a1","$$treeLevel":2},
{"sectorName":"a-a3-a1-a1","sectorType":"a-a3-a1-a1","$$treeLevel":3},
{"sectorName":"b","sectorType":"b","$$treeLevel":0},
{"sectorName":"c","sectorType":"c","$$treeLevel":0},
{"sectorName":"c-c1","sectorType":"c-c2","$$treeLevel":1}
]"
递增treeLevel的是,如果我们有一个部门数组作为当前对象的一部分,复制当前对象赋给它treeLevel的逻辑,递增treeLevel然后递归。 但请注意,同一父母的直接子女将被分配正确的树级别。例如,在上面的{"sectorName":"a-a3","sectorType":"a-a3","$$treeLevel":1},
'a-a3'是'a-a1'的直接子节点将被赋予treeLevel为1而不是零。
有人能帮我解决这个问题。我只需要弄清楚如何让树型分配工作。我对所有的解决方案都是开放的,递归的,非递归的,使用lodash lib等等。
在此先感谢。
为什么更深层次的通缉的结果产生的零的水平? –
treeLevel应该表示深度。因此,如果你的对象没有更多的子节点,我将分配一个零树层来表示没有更多的深度。然而,后来我更新了我的代码,并从没有任何子项的对象中删除了treeLevel,因为它更有意义。 – digitalis