javascript - 根据下面给出的逻辑实现父子关系逻辑
问题描述
必须执行以下逻辑,我无法继续,
逻辑:
A has a child B
B has a child C
C has a child D
D doesn’t have any child
E doesn’t have any child
在选择任何父母时,应在列表中添加该特定选定父母的潜在孩子列表。
对于上述场景,所需的输出如下所示,
在选择父 A 时,子列表包含 B、C、D 和 E。
在选择父 B 时,子列表包含 C、D 和 E。A 不能是 B 的子,因为 B 已经是 A 的子,因此不会列出 A。
在选择父级 C 时,子级列表包含 D 和 E。B 不能是 C 的子级,因为 C 已经是 B 的子级,A 不能是 C 的子级,因为 B 是流 A 的子级。因此 A 和B 不会被列出。
在选择父母 D 时,孩子的列表 E.C 不能是 D 的孩子,因为 D 已经是 C 的孩子,B 不能是 D 的孩子,因为 B 是 C 的孩子,A 不能是 D 的孩子因为 A 有一个孩子 B。因此不会列出 A、B 和 C。
在选择 E 时,孩子列表包含 A、B、C 和 D。
请帮我实现这个逻辑。
解决方案
假设每个节点至多有一个父节点,以下逻辑应该可以完成这项工作:
var allNodes = [A, B, C, D, E]
function onNodeSelect(node) {
var possibleChildren = allNodes
possibleChildren.remove(node)
var currentNode = node
while (currentNode.hasParent) {
currentNode = node.parent
possibleChildren.remove(currentNode)
}
return possibleChildren
}
推荐阅读
- subdomain - 在 Segment 上禁用子域跟踪
- javascript - 使用 lodash(或等效)_.get() 函数通过引用而不是值获取对象
- python - 如何制作一个可以下载目录文件的 Python HTTP 服务器
- rust - 你如何定义一个可以接受 Vec 或任何可以迭代的函数参数?
- database - 将大型 csv ( 200+ GB ) 数据从 HDFS 加载到 Teradata 的最佳方法?
- javascript - 护照 - 发送后无法设置标题
- selenium - 使用 Selenium——如何在特定列中迭代 Trello 卡片?
- firebase - Firebase 身份验证自定义 URL - 删除 api 密钥
- ios - 注释框架的iOS注释字典值中的PDFKit返回NSRect
- c++ - “扩展初始化列表仅适用于 -std=c++11 或 -std=gnu++11”,我收到此错误