获取对象树中给定节点的子节点

Get children of a given node within an object tree

本文关键字:节点 子节点 取对象 获取      更新时间:2023-09-26

如何在深度 = 1 的对象树中返回给定节点(键名)的子节点(键名),表示仅表示第一个子节点。

具体问题:

所以这是一个示例数据对象...

{
    "1753": {
        "1755": {
            "1758": {
                "1762": "1753_1755_1758_1762",
                "1760": "1753_1755_1758_1760",
                "1764": "1753_1755_1758_1764",
                "1761": "1753_1755_1758_1761"
            },
            "1759": {
                "1762": "1753_1755_1759_1762",
                "1760": "1753_1755_1759_1760",
                "1764": "1753_1755_1759_1764",
                "1761": "1753_1755_1759_1761"
            }
        },
        "1756": {
            "1758": {
                "1762": "1753_1756_1758_1762",
                "1760": "1753_1756_1758_1760",
                "1764": "1753_1756_1758_1764",
                "1761": "1753_1756_1758_1761"
            },
            "1759": {
                "1762": "1753_1756_1759_1762",
                "1760": "1753_1756_1759_1760",
                "1764": "1753_1756_1759_1764",
                "1761": "1753_1756_1759_1761"
            }
        },
        "1757": {
            "1758": {
                "1762": "1753_1757_1758_1762",
                "1760": "1753_1757_1758_1760",
                "1764": "1753_1757_1758_1764",
                "1761": "1753_1757_1758_1761"
            },
            "1759": {
                "1762": "1753_1757_1759_1762",
                "1760": "1753_1757_1759_1760",
                "1764": "1753_1757_1759_1764",
                "1761": "1753_1757_1759_1761"
            }
        }
    },
    "1754": {
        "1755": {
            "1758": {
                "1763": "1754_1755_1758_1763"
            }
        },
        "1756": {
            "1758": {
                "1763": "1754_1756_1758_1763"
            }
        },
        "1757": {
            "1758": {
                "1763": "1754_1757_1758_1763"
            }
        }
    }
}; 

对象的每个级别代表页面上的一个下拉菜单。

我需要做的是,当有人从其中一个下拉菜单中选择某些内容时,我需要返回所有剩余菜单的可能性。

例如,假设我从 dropdown-3 中选择值"1758"(因为它是对象的第三级),请执行以下操作:

I would need to return info stating that because I selected "1758" from dropwdown-3... 
    -dropdown-1 can be 1753, 1754.
    -dropdown-2 can be 1755,1756,1757
    -dropdown-3 can remain unchanged
    -dropdown-4 can be 1762,1760,1764,1761,1763

到目前为止,我已经能够取得如此多的成就...当发生以下情况的某种组合时,问题就出现了:

I have selected option "1758" from dropdown-3, AND THEN SELECTED "1754" from dropdown-1...
    -dropdown-1 has the most recent selected value, it can remain unchanged
    -dropdown-2 can be 1755,1756,1757
    -dropdown-3 is set, but can still have its possible values modified & checked for accuracy
        -dropdown-3 can be only 1758
    -dropdown-4 can be only 1753

这是一个示例对象,我的所有对象都有不同的深度和复杂性......我已经做了不少尝试,希望有人能向我展示光明:)

谢谢

想一想,你想根据选择(节点名称)它的子级,所以你不需要完整的对象树(尽管你可以使用它),您可以更轻松地将邻接列表用作查找表(哈希表):

adj["1753"] = ["1755"];
adj["1755"] = ["1758"]
adj["1758"] = ["1762", "1760", "1764", "1761"]
adj["1762"] = "1753_1755_1758_1762"    
...
所以现在有人选择 "1753",

你查找 adj["1753"] 并得到带有可能 chidlren 的数组,与其他数组相同。

但是如果你想使用你不知道的深度的当前数据结构,那么你应该使用 for(树中的 var 键)+ 递归来遍历树,但这几乎毫无意义,因为你需要一个给定的(父)节点名称遍历整个树以"知道"父节点的位置(假设唯一键!

因此,最好使用邻接列表。