首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取对象树中给定节点的子节点

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

Stack Overflow用户
提问于 2012-04-16 10:37:07
回答 1查看 303关注 0票数 0

如何在深度=1的对象树中返回给定节点(键名)的子节点,这意味着只返回第一个子节点。

具体问题:

下面是一个示例数据对象...

代码语言:javascript
复制
{
    "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“(因为它是对象中的第三级),请执行以下操作:

代码语言:javascript
复制
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

到目前为止,我已经做到了这么多……当这种情况的某种组合发生时,问题出现了:

代码语言:javascript
复制
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

这是一个样本对象,我的所有对象都会有不同的深度和复杂性…我已经在这方面做了相当多的尝试,希望有人能给我指路:)

谢谢

EN

回答 1

Stack Overflow用户

发布于 2012-04-16 11:41:03

想一想,你想基于选择(节点名)它的孩子,所以你不需要完整的对象树(虽然你可以使用它),你可以更容易地使用邻接表作为查找表(哈希表):

代码语言:javascript
复制
adj["1753"] = ["1755"];

adj["1755"] = ["1758"]

adj["1758"] = ["1762", "1760", "1764", "1761"]

adj["1762"] = "1753_1755_1758_1762"    
...

所以现在有人选择"1753",你查找adj"1753“,得到包含可能的chidlren的数组,和其他的一样。

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

所以最好使用邻接表。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10168115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档