我有这两门课:class Node { constructor(nodeId){ this.nodeId = nodeId; this.adjacencies = []; } connectToNode(nodeToConnectTo){ this.adjacencies.push(nodeToConnectTo); }}class Graph{ constructor(nodes){ this.nodes = nodes; } printGraph(){ for (let node in this.nodes){ console.log(node.nodeId); } }}我只是想通过这种方式调用printGraph打印所有nodeIds :let node1 = new Node('1');let node2 = new Node('2');let node3 = new Node('3');const arr = [node1, node2, node3];let graph = new Graph(arr);graph.printGraph();但它正在打印undefined。我似乎无法弄清楚为什么它不简单地打印nodeId.
4 回答
尚方宝剑之说
TA贡献1788条经验 获得超4个赞
您使用了错误的 for 循环。尝试将其更改为:
printGraph(){
for (let node of this.nodes){
console.log(node.nodeId);
}
}
for..of 循环应该按照您想要的方式循环遍历节点。
结果:
1
2
3
慕哥9229398
TA贡献1877条经验 获得超6个赞
看来您正在使用关键字迭代数组对象的属性in。对于数组,这意味着您要迭代索引(键),即 3 成员数组中的 0、1、2。这些是字符串,没有属性nodeId,所以你的输出是undefined. console.log(node, typeof node)如果您在当前循环内运行(与 保持一致),您将看到这些in。
如果在 for 循环中使用of关键字,您将获得数组的值,即值为 1、2 和 3 的对象nodeId。因此,您所要做的就是更改in为of,您将获得所需的输出。
就我个人而言,我会用这个:
printGraph(){
const nodeIds = this.nodes.map(node => node.nodeId);
console.log(nodeIds);
}
蓝山帝景
TA贡献1843条经验 获得超7个赞
你需要打印,console.log(node);
因为你正在循环槽let node in this.nodes
node
实际节点来自哪里this.nodes
添加回答
举报
0/150
提交
取消