次のような階層データ構造があります。
var tree = [ {foo: 1, children:[
{foo: 2, children:[
{foo: 13, children:[]},
{foo: 14, children:[]}
]},
{foo: 3, children:[]},
{foo: 4, children:[]}
]},
{foo: 5, children:[
{foo: 6, children:[]},
{foo: 8, children:[]}
]},
{foo: 9, children:[
{foo: 10, children:[]},
{foo: 11, children:[]},
{foo: 12, children:[]}
]} ];
ツリーの深さは任意です。
ツリー内の特定のオブジェクト (その子を含む) を再配置するには、次のように簡単に記述できます。
// Move object from [0, 0, 1] to [2, 1]
var obj = tree[0]['children'][0]['children'][1];
tree[0]['children'][0]['children'].splice(1, 1);
tree[2]['children'].splice(1, 0, obj);
しかし、一般的なケースをプログラムすることはできません:
2 組の座標を指定して、オブジェクトを [i1, i2, ..., im] から [j1, j2, ..., jn] に再配置します。
この再帰アルゴリズムを構築する方法についてのヒントが欲しいです。これは純粋な Javascript の質問ですが、私のアプリケーションは AngularJS と jQuery を使用していることに注意してください。おそらくこれらのライブラリは、私が使用できる配列操作関数を提供していますか?