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

Javascript 获取对象树中给定节点的子节点,javascript,object,tree,children,traversal,Javascript,Object,Tree,Children,Traversal,如何返回深度为1的对象树中给定节点(键名)的子节点,表示仅返回第一个子节点 具体问题: 这是一个示例数据对象 { "1753": { "1755": { "1758": { "1762": "1753_1755_1758_1762", "1760": "1753_1755_1758_1760", "1764": "1753_1755_1758_1764"

如何返回深度为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"
            }
        }
    }
}; 
对象的每个级别表示页面上的下拉菜单

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

例如,假设我从下拉列表-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
这是一个示例对象,我所有的对象都具有不同的深度和复杂性。。。 我已经做了很多尝试,希望有人能告诉我真相:)


谢谢

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

所以现在有人选择“1753”,你查adj[“1753”],得到可能有chidlren的数组,其他的也一样

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


所以最好使用邻接列表。

可以大大简化任务老实说,在你发布这篇文章之前,我不知道邻接列表是什么。。。这个概念是有道理的,但我不知道如何制作或遍历它抱歉,当然是php开发人员而不是js。。。我现在看到它们很像一个关联数组,不知道如何在js tho中创建它。我的意思是我不能帮助你思考部分,这里是如何使用的,你已经有了我的示例中的邻接列表的链接,现在轮到你了。没有意义的是邻接[“1753”]=“1755”];绝对形容词不是等于1755、1756或1757吗?那么你怎么确定呢?在其他语言中你会怎么做?写一个对象并将对象存储在邻接列表中,然后就知道了什么是什么。显然,您不知道如何处理这个问题,首先需要熟悉JavaScript基础。然后回到这个问题上来。
adj["1753"] = ["1755"];

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

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

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