Node.js使用Map构建机场有向图时Pramp编辑器输出空Map问题咨询
问题原因与解决方案
1. Map输出为空的根本原因
你遇到的空Map问题不是Pramp编辑器导致的,是代码本身存在两处语法和逻辑错误:
- 函数名大小写不匹配:你定义的添加节点函数名为
addnode(小写n),但调用时写的是addNode(大写N),二者无法匹配 - 核心初始化逻辑缩进错误:
addEdge函数定义、airports.forEach、routes.forEach这三段代码全被写到了addnode函数内部,而你从头到尾没有调用过addnode,所有初始化逻辑根本没有执行,Map自然是空的。
2. 代码语法解释
针对你问的routes.forEach(route => addEdge(...route))这行:
=>是箭头函数语法,是普通匿名函数的简写形式,此处等价于:
作用是遍历routes.forEach(function(route) { addEdge(...route) })routes数组里的每一条航线数据,对每条航线执行添加边的操作。- 三个点
...是JavaScript的扩展运算符,作用是把数组拆成独立的参数,比如当前遍历到的航线是['PHX','LAX'],...route就等价于'PHX','LAX'两个参数,和手动写addEdge(route[0], route[1])效果完全一致,写法更简洁。
3. 修正后的可运行代码
// 数据定义 const airports = 'PHX BKK OKC JFK LAX MEX EZE HEL LOS LAP LIM'.split(' '); const routes = [ ['PHX','LAX'], ['PHX','JFK'], ['JFK','OKC'], ['JFK','HEL'], ['MEX','LAX'], ['MEX','BKK'], ['MEX','LIM'], ['MEX','EZE'], ['LIM','BKK'], ]; // 图初始化 const adjacencyList = new Map(); // 添加节点函数 function addNode(airport){ adjacencyList.set(airport,[]); } // 添加无向边函数 function addEdge(origin,destination){ adjacencyList.get(origin).push(destination); adjacencyList.get(destination).push(origin); } // 执行图构建 airports.forEach(addNode); routes.forEach(route => addEdge(...route)) console.log(adjacencyList);
修正后再在Pramp编辑器运行就能得到你预期的Map结构。
内容的提问来源于stack exchange,提问作者Carolyn Cordeiro
相关产品推荐
相关产品推荐

