我有一个像这样的对象集合:
[
{key:8, parent:'none'},
{key:5, parent:8},
{key:3, parent:5},
{key:2, parent:3},
{key:4, parent:5},
{key:1, parent:4},
{key:3, parent:4},
{key:2, parent:3},
]
所有可能的路径:
8->5->3->2
8->5->4->1
8->5->4->3->2
生成尽可能多的字符串的最简单方法是什么。可能的路径,每个字符串的值是路径序列?
我知道的方式要求我有嵌套循环(顺序n ^ 2),这是最佳算法。
请注意,上述结构是有向非循环图上DFS的结果(如果此信息以任何方式帮助,即在dfs迭代期间记录信息)
答案 0 :(得分:3)
您可以使用递归方法来构建路径数组,因为您有{key:2, parent:3}
两次可以使用Set
并结束删除重复项。
var data = [{key:8, parent:'none'},{key:5, parent:8},{key:3, parent:5},{key:2, parent:3},{key:4, parent:5},{key:1, parent:4},{key:3, parent:4}, {key:2, parent:3}]
var result = []
function buildStrings(arr, parent, c) {
return arr.reduce(function(r, e) {
if (e.parent == parent) {
var children = buildStrings(arr, e.key, c + e.key + '->')
if (!children.length) result.push(c + e.key)
r.push(e)
}
return r;
}, [])
}
buildStrings(data, 'none', '')
result = [...new Set(result)]
console.log(result)