0

深さ = 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"
            }
        }
    }
}; 

オブジェクトの各レベルは、ページのドロップダウン メニューを表します。

私がしなければならないことは、誰かがドロップダウンメニューの1つから何かを選択したときに、残りのメニューの可能性をすべて返す必要がある..

たとえば、ドロップダウン 3 から値「1758」を選択したとします (オブジェクトの 3 番目のレベルであるため)。次のようにします。

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

これはサンプル オブジェクトです。私のオブジェクトはすべてさまざまな深さと複雑さを持っています...私はこれでかなりの数の試みをしました。うまくいけば、誰かが私に光を見せてくれます :)

ありがとう

4

1 に答える 1

0

考えてみてください。選択(ノード名)に基づいてその子が必要になるため、完全なオブジェクトツリーは必要ありません(使用できますが)。隣接リストをルックアップテーブル(ハッシュテーブル)として簡単に使用できます。 :

adj["1753"] = ["1755"];

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

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

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

したがって、誰かが「1753」を選択すると、adj["1753"] を調べて、他の子と同じように可能な子供の配列を取得します。

しかし、深さがわからない現在のデータ構造を使用したい場合は、 for(var key in tree) + recursion を使用してツリーをトラバースする必要がありますが、これはほとんど無意味です。 ) ノード名は、親がどこにあるかを「知る」ためにツリー全体をトラバースします (一意のキーを仮定します!)。

したがって、隣接リストを使用することをお勧めします。

于 2012-04-16T03:41:03.130 に答える