为了账号安全,请及时绑定邮箱和手机立即绑定

在“for”–“in”循环中访问对象的属性会导致“undefined”

在“for”–“in”循环中访问对象的属性会导致“undefined”

MMTTMM 2023-09-28 17:31:59
我有这两门课: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


查看完整回答
反对 回复 2023-09-28
?
炎炎设计

TA贡献1808条经验 获得超4个赞

我认为问题可能是您使用“for in”循环而不是“for of”来迭代数组。

“for in”循环用于迭代对象属性


查看完整回答
反对 回复 2023-09-28
?
慕哥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);

}


查看完整回答
反对 回复 2023-09-28
?
蓝山帝景

TA贡献1843条经验 获得超7个赞

你需要打印,console.log(node); 因为你正在循环槽let node in this.nodes

node实际节点来自哪里this.nodes


查看完整回答
反对 回复 2023-09-28
  • 4 回答
  • 0 关注
  • 159 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信