【发布时间】:2020-07-12 20:54:08
【问题描述】:
函数和方法 DPS 做同样的事情,它们获取一个顶点(以及函数 DPS 的图形)并进行深度优先搜索并返回图形中的所有节点。 每当我调用方法 tree.DPS() 时,我都会收到错误
VM1267 graphs:37 Uncaught TypeError: Cannot read property 'adjacencyList' of undefined
这是第 37 行
let l = this.adjacencyList[0];
但是当我运行 DPS() 函数时,它工作正常。任何人都可以看到为什么? adjacencyList 是图的一个属性,它包含顶点作为键,值作为顶点对应的边作为列表。
DPS(vertex) {
visited = []
helper(vertex)
function helper(vertex) {
visited.push(vertex)
let l = this.adjacencyList[0];
console.log(l)
return l
for (let i =0; i < l.length; i++ ) {
if (!visited.includes(l[i])) {
helper(l[i])
}
}
}
return visited
}
}
g = new Graph
g.addVertex('Tokyo')
g.addVertex('NYC')
g.addVertex('San Francisco')
g.addEdge('NYC','Tokyo')
g.addEdge('San Francisco','Tokyo')
g.addEdge('NYC','San Francisco')
function DPS(graph,vertex) {
visited = []
helper(vertex)
function helper(vertex) {
visited.push(vertex)
let l = graph.adjacencyList[vertex];
for (let i =0; i < l.length; i++ ) {
if (!visited.includes(l[i])) {
helper(l[i])
}
}
}
return visited
}
//DPS(g,'NYC') This works
g.DPS('NYC')
【问题讨论】:
-
首先,您是否检查过
this.adjacencyList是一个数组,并且它至少有一个元素?例如,一个空数组将为this.adjacencyList[0]返回undefined。 -
它肯定是一个数组,我检查了它,否则该功能将无法正常工作。
-
好的,它是否也至少包含一个元素?如果没有,它将返回
undefined。 -
Graph和Graph.DPS的定义是什么?该问题包括DPS(vertex)和DPS(graph,vertex),但没有显示DPS如何与Graph的原型相关联... -
注意:未捕获的类型错误:无法读取未定义的属性。当传递给函数的操作数或参数与该运算符或函数预期的类型不兼容时,将引发 JavaScript TypeError。
标签: javascript data-structures