【发布时间】:2020-03-26 12:39:14
【问题描述】:
以下是 JSON,我用来生成以下 UI:
{
"Text" : "1. Parent group"
"Logic" : "all of the following",
"Id":"1" //some unique id
"children": [
{
"Text' : "1.1 Level Child group"
"Logic' : "1 or more of the following",
"Id':"1.1" //some unique id,
"children" : [
{
"Text' : "1.1.1 Level Child group"
"Logic' : "all of the following",
"Id':"1.1.1" //some unique id,
"children": [
{
"Text' : "1.1.1.1 Level Child"
"Id':"1.1.1.1" //some unique id,
},
{
"Text' : "1.1.1.2 Level Child"
"Id':"1.1.1.2" //some unique id,
"Logic" : "one or more of the following",
"children" : [
{
"Text": "1.1.1.2.1 Level Child",
"Id": "1.1.1.2.1"
},
{
"Text": "1.1.1.2.2 Level Child",
"Id": "1.1.1.2.2"
},
]
}
]
},
{
"Text' : "1.1.2 Level Child group"
"Id':"1.1.2" //some unique id,
},
{
"Text' : "1.1.3 Level Child group"
"Id':"1.1.3" //some unique id,
},
{
"Text' : "1.1.4 Level Child group"
"Logic' : "one or more of the following",
"Id':"1.1.4" //some unique id,
"children": [
{
"Text' : "1.1.4.1 Level Child"
"Id':"1.1.4.1" //some unique id,
},
{
"Text' : "1.1.4.2 Level Child"
"Id':"1.1.4.2" //some unique id,
}
]
},
{
"Text' : "1.1.5 Level Child group"
"Logic' : "all of the following",
"Id':"1.1.5" //some unique id,
"children": [
{
"Text' : "1.1.5.1 Level Child"
"Id':"1.1.5.1" //some unique id,
},
{
"Text' : "1.1.5.2 Level Child"
"Id':"1.1.5.2" //some unique id,
}
]
}
]
},
{
"Text" : "1.2 Level Child"
"Id":"1.2" //some unique id
}
]
}
1. 家长组(以下全部)
1.1级子组(1个或更多)
1.1.1 级别子组(以下所有)
1.1.1.1 Level Child // 可选
1.1.1.2 Level Child // 可选
1.1.2 Level Child // 可选
1.1.3 Level Child // 可选
1.1.4 级别子组(以下一项或多项)
1.1.4.1 Level Child // 可选
1.1.4.2 Level Child // 可选
1.1.5 Level Child组(以下所有)
1.1.5.1 Level Child // 可选
1.1.5.2 Level Child // 可选
1.2 Level Child // 可选
节点工作逻辑:
用户只能选择没有子节点的节点。
当且仅当所有嵌套的子节点都被选中时,如果逻辑是“所有以下”,则隐式选择节点
-
如果逻辑是“下面的n或更多”如果选择“n”嵌套的孩子选择
,则隐式选择node
场景:如果用户选择1.1.2(隐式满足1.1)和1.2那么“1.父组”就是“ Met”,因此被选中(使全组相遇);
场景:如果用户选择1.1.1.1,用户必须选择1.1.1.2,这样1.1.1就是“Met " 并选择1.2,将使整个组为“Met”。
实际需要是在“不满足父组”时找到最优id:
如果选择任何节点和最顶层的父组仍然没有“满足”。 然后单击按钮,我需要找到并返回最佳节点 ID 他们的存在会使“父组”成为“Met”。
注意:在找到最佳节点 ID 时,如果选择了任何子组,我们应该重视子组。
例如:
如果用户只选择了1.2,最快的方法是 遇到的“父组”是选择1.1.2。但是如果 1.1.1 有任何孩子 选择,那么我应该优先考虑 1.1.1 节点,结果我 需要返回以下ID:[ 1.1.1.2, 1.1.1, 1.1 ]
不确定我应该使用哪种算法来解决这个问题。
【问题讨论】:
-
您可以从添加有效数据开始。如何知道一个节点是否被选中?
-
每次选择一个节点时,我都会在一个数组中维护节点id。
-
它看起来怎么样?
-
假设用户选择“1.2 Level Child”节点。我所做的只是存储特定节点的节点“Id”。它看起来像这样:[“1.2”]。如果您想要添加一个名为“selected”的属性:true 或 false 基于被选择或取消选择的节点。我能做到。
-
如果用户选择了一些东西,你从哪里得到选定的节点?
标签: javascript json algorithm tree