我有一个用Typescript编写的深度优先搜索函数,该函数按照我的预期工作,遍历每个连接的节点。但是我在while循环中有一个return语句,我希望函数在当前节点的id与目标id匹配时返回。它只是一个数字等于一个数字。条件按预期满足,但函数没有返回true,它在while条件完成后返回。这是Typescript行为吗?有没有办法让它像我期望的那样工作,结束while循环并从函数返回true?
function dfs(graph: any, node: any,nodedata: any,target?: any){
var stack: any[] = []
var visited: any[] = []
var visiting = null
stack.push(node)
visited.push(node)
while(stack.length > 0){
visiting = stack.pop()
var connectedNodes = graph.getConnectedNodes(visiting.id,"to")
connectedNodes.forEach(function(itm: any){
var check_node = nodedata.get(itm)
console.log("check_node",check_node.id,"target",target.id)
// Here is the problem everything works but the return true never happens
if(check_node.id == target.id){
console.log('Condition met')
return true
}
// ----------------------------------------------------------------------
if(!visited.includes(check_node)){
visited.push(check_node)
stack.push(check_node)
}
})
}
return false
}
我希望得到真,因为我设置它,所以条件是真的。我得到'条件满足',所以条件触发,但它只是下降,并返回假。正如我前面所说,函数的工作只是不返回从while。我可以解决它,但它似乎有点奇怪。
// Here is the problem everything works but the return true never happens
if(check_node.id == target.id){
console.log('Condition met')
return true // Never happens
}
// ----------------------------------------------------------------------
检查结果的哑代码
一个二个一个一个
1条答案
按热度按时间5f0d552i1#
您正在从
forEach()
函数的回调中返回true
。此返回值不会返回到外部作用域。此外,您还失去了在找到匹配值时提前返回的好处,因为
forEach()
会很乐意地继续迭代,而不管您从其回调中返回什么值。最简单的解决方案是使用标准
for
循环:不管出于什么原因,如果您更愿意坚持函数式范例,则可以使用
some()
: