节点层次结构如下所示:
{
"nodes":[
{
"assetId":"cfe-3a2b-47e7-b7e9-e2e090ca0d34",
"assetName":"IRCTC",
"assetType":"Company"
},
{
"assetId":"32d9-05b8-4293-af55-2ee4617c6ffe",
"assetName":"Northern Railway Fleet",
"assetType":"Fleet"
},
{
"assetId":"15-b76c-426c-a272-6485359c5836",
"assetName":"Vande Bharat Express",
"assetType":"Train"
}
],
"edges":[
{
"source":"cfe-3a2b-47e7-b7e9-e2e090ca0d34",
"destination":"32d9-05b8-4293-af55-2ee4617c6ffe",
"relation":"HAS"
},
{
"source":"32d9-05b8-4293-af55-2ee4617c6ffe",
"destination":"15-b76c-426c-a272-6485359c5836",
"relation": "HAS"
}
]
}
基本上,节点包含一组资产列表,边包含它们的Map或关系。我们需要先遍历节点,然后创建一个名为
创建面包屑(“15-b76 c-426 c-a272 - 6485359 c5836”);
它应该在边缘对象中检查该节点ID并检索其父节点。
Breadcrumb would be:
"IRCTC > Northern Railway Fleet > Vande Bharat Express"
3条答案
按热度按时间0vvn1miw1#
可以通过创建中间对象
nodeIdToName
和nodeIdToParentId
来实现,以便在while循环中轻松查找:输出:
注:在输出中添加
nodeIdToName
和nodeIdToParentId
仅用于说明9rygscc12#
Map
对象,一个Map每个节点的assetId
-〉assetName
,另一个Map对象Map每条边的destination
-〉到它的source
。id
的函数,获取当前id的source
和节点名。source
不为空,则递归调用该函数并在末尾追加当前crumb。否则,返回,current crumbefzxgjgh3#
我将提出一个解决方案,它使用与这个问题的其他答案相同的惯用数据结构:associative array-但是,此答案侧重于使用函数式编程来获得解决方案:
第一步是从初始输入生成doubly-linked list节点的
Map
,这将为您提供解决所描述的问题所需的所有关系数据,并从您提供的示例输入中获得任何其他类型的关系洞察力:然后,您可以使用链接列表对象的Map来构建您的面包屑路径:
使用它的过程如下所示:
还可以自定义输出:
下面是一个工作代码片段示例,其中包含上面的代码和您输入的问题:
TypeScriptPlayground中的代码