javascript - 有人可以帮我理解这段代码吗?
问题描述
我不明白图 [from] 是如何工作的,它是否检查了“from”位置的数组中的值?还是“来自”对象的属性名称?我在我的终端上都试过了,当它是一个数字时,使用 from 作为属性名称。将它用作数组索引会给我一个错误,即“来自未定义”。还有图[from].push(to)。这个怎么运作?
function buildGraph(edges) {
let graph = Object.create(null);
function addEdge(from, to) {
if (graph[from] == null) {
graph[from] = [to];
} else {
graph[from].push(to);
}
}
for (let[from, to] of edges.map(r = > r.split("-"))) {
addEdge(from, to);
addEdge(to, from);
}
return graph;
}
const roadGraph = buildGraph(roads);
解决方案
您有一个道路列表,定义为 list os 字符串对,由“-”连接,就像"Alice's House-Bob's House"
连接 Alice 和 Bob 房子的道路。
然后,每条道路由 2 条边组合而成:Alice House 和 Bob house(您将道路与边分开split('_')
)。
现在您创建了一张道路地图,这里将其命名为graph
. 对于每条道路,您添加 2 条边,从点 A-> B 和 B-> A。
addEdge(from, to);
addEdge(to, from);
因为您可以使用同一条道路双向行驶。
每个 addEdge 调用都会检查图中是否from
已经注册了一条边。但在我看来,它应该是这样的:
function addEdge(from, to) {
if (!graph[from]) { // if object 'from' is not yet register, add an empty array to from key
graph[from] = [];
}
graph[from].push(to); // add edge 'to, to mapping of 'from'
}
所以最后你会建立一个地图,看起来像这样:
graph = {
'Alice house': ['Bob house', 'Post office'],
'Post office': ['Alice house'],
'Bob house': ['Alice house']
}
推荐阅读
- python - URL 密码 (netloc) 中是否允许使用问号 (?)?
- javascript - 不要让在输入中写入大于 max 属性的数字
- react-native - 无法使用 Galio 框架显示 Toast
- security - 当这些工具无法在直播中检测到 ADS 时?
- javascript - Nodejs 推荐干净的文件夹结构
- angular - 如何在 Angular 中隐藏 mat-expansion-panel?
- list - 用递归判断两个列表的长度是否相同
- python - 使用 jupyter notebook 从两个数据帧中找到两行中的共同部分
- java - 如何从 keycloak 自定义身份验证器上的 AuthenticationFlowContext 获取访问令牌
- android - 在使用 npx react-native run-android 命令运行 react native 应用程序时,会出现错误