【问题标题】:JavaScript for Loop - Error Code "item not defined" [duplicate]JavaScript for Loop - 错误代码“未定义项目”[重复]
【发布时间】:2021-10-29 18:29:33
【问题描述】:

我有点卡在这里,因为我不知道为什么这不起作用。当我尝试运行代码时,它会显示“ReferenceError: item is not defined”——但我认为通过编写“let item”是在定义它。知道这里有什么问题吗?

  • 我知道代码看起来有点复杂,但我需要这样做。
class Graph {
  constructor() {
    this.nodes = new Set();
    this.edges = new Set();
  }

  add(m,n){
   let e = new Edge (m,n)
   var allEdges = new Set();
   for (let item of this.edges){ 
     allEdges.add(item.startpoint.nodeName,item.endpoint.nodeName)
   };
   if (allEdges.has(e.startpoint.nodeName,e.endpoint.nodeName)){ 
     console.log("first OCL Constraint")
   } else if(allEdges.has(e.endpoint.nodeName,e.startpoint.nodeName){    
     console.log("second OCL Constraint")}
   else { 
     this.edges.add(item.startpoint.nodeName,item.endpoint.nodeName)};
   }
};

class Edge {
  constructor(startpoint,endpoint) {
    this.startpoint = startpoint;
    this.endpoint = endpoint;
  }
};

class Node {
  constructor(nodeName) {
    this.nodeName = nodeName
  }
};

node1 = new Node (1);
node2 = new Node (2);
node3 = new Node (3);
node4 = new Node (4);
node5 = new Node (5);
myTestGraph = new Graph();

myTestGraph.add(node1,node2);
myTestGraph.add(node2,node1);
myTestGraph.add(node3,node4);

提前致谢:)

【问题讨论】:

  • let item 使它存在于 for 循环内,但是您随后在 for 循环外的 else 子句中访问 item。您的代码还有其他问题,例如 Set.has 只接受一个参数(其余的被忽略)
  • 我觉得这很有道理 :) 我试图解决这个问题: } add(m,n){ let e = new Edge (m,n) var allEdges = new Set(); for (let item of this.edges){allEdges.add(item.startpoint.nodeName,item.endpoint.nodeName)}; if (allEdges.has(e.startpoint.nodeName,e.endpoint.nodeName)){console.log("first OCL Constraint")} else if(allEdges.has(e.endpoint.nodeName,e.startpoint.nodeName) ){console.log("第二个 OCL 约束")} 否则 {this.edges.add(e.startpoint.nodeName,e.endpoint.nodeName)}; } }; 但现在它说:无法访问属性“nodeName”,item.startpoint 未定义*
  • 请不要以 cmets 的形式发布问题更新。这是固定代码,正确缩进:jsfiddle.net/ak7wbn59
  • 对此感到抱歉-感谢您的代码!问题是不幸的是我只被允许使用添加功能:(
  • 哇!你浪费了多少空间! = 周围有很多空格。你怎么能这样做? (如果你不介意,那就是讽刺)

标签: javascript for-loop undefined


【解决方案1】:

问题似乎出在最后一个“else”中,您在其中引用了超出其范围的“item”(您在 for 块中声明了 let item) 我认为 add() 方法的正确代码是:

add(m,n){
   let item;
   let e = new Edge(m,n);
   var allEdges = new Set();
   for (item of this.edges){allEdges.add(item.startpoint.nodeName,item.endpoint.nodeName)};
   if (allEdges.has(e.startpoint.nodeName,e.endpoint.nodeName)){console.log("first OCL Constraint")}
   else if(allEdges.has(e.endpoint.nodeName,e.startpoint.nodeName)){console.log("second OCL Constraint")}
   else {this.edges.add(item.startpoint.nodeName,item.endpoint.nodeName)};
}

【讨论】:

  • 不幸的是,它不起作用返回“无法访问属性“起点”,项目未定义”
猜你喜欢
  • 1970-01-01
  • 2016-07-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多