【发布时间】: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