私は例えば、複数のツリーを持っています。このような単一のJavaScriptオブジェクトで表現JavaScriptツリー - エレガントなソリューションですか?
a h
| \ |
b c i
/| \ /\
d e f j k
| /| \
g l m n
:
{ 'a': ['b', 'c'],
'b': null,
'c': ['d', 'e', 'f'],
'd': null,
'e': ['g'],
'f': null,
'g': null,
'h': ['i'],
'i': ['j', 'k'],
'j': ['l', 'm', 'n'],
'k': null,
'l': null,
'm': null,
'n': null }
すなわち、すべてのノードがキーとして表示され、特定のキーの値/ nodeはすべての子ノードの配列です(子ノードがない場合はnull
)。
私は二つのことを構築したいと思います:
すべての根の配列を。この例では、
['a', 'h']
すべてのルートについて、ルートを含むすべての子孫の配列。この例では:
['a', 'b', 'c', 'd', 'e', 'f', 'g']
['h', 'i', 'j', 'k', 'l', 'm', 'n']
得られた配列内の要素の順序は問いません。
JavaScriptでこれを実装するための洗練された方法を提案できますか(jQueryは許可されています)。
何かのキャッシングサブツリーの結果を実装しない限り、ツリー全体を走査する必要があります。これらの木はどのくらいの大きさになるのですか?あなたはすでに木全体を横断する最も忌まわしい方法を試しましたか? – Eduardo
jQueryはDOM操作用です。それはロジックコードのためのものをほとんど提供しません( 'map'だけ考えることができます)。あなたはアンダースコアを考えましたか?これは、DOMのものではなく、通常のJavaScriptに便利なユーティリティを提供することによって、jQueryを補完するライブラリです。 –
典型的な深さは3、子どもの数は5未満です。 –