0
オブジェクトツリー内のルートごとに子を並べ替えるにはどうすればよいですか?再帰的にツリーを並べ替える
ツリー:
{
folder: { id: 1, name: 'root' },
children: [
{
folder: { id: 2, parentId: 1, name: 'zzz' },
children: []
},
{
element: { id: 1, name: 'aaa' },
children: []
}
]
}
それはなど、実際の木、ここでフォルダや要素を入れ替えますソートははるかに高い深さと、はるかに大きいです。これどうやってするの?
私はこの木で何かを見つけるアルゴリズムがあります。
/**
* searchFor {
* type: '',
* index: '',
* value: ''
* }
*/
var search = function (data, searchFor) {
if (data[searchFor.type] != undefined &&
data[searchFor.type][searchFor.index] == searchFor.value) {
return data;
} else if (data.children != null) {
var result = null;
for (var i = 0; result == null && i < data.children.length; i++) {
result = search(data.children[i], searchFor);
}
return result;
}
return null;
};
をしかし、私は正直なところ、私はちょうどそれを並べ替えることができますか見当がつかない。私はこれをどのようにするべきですか?
私はこのような何かを試してみましたが、それは動作しません:
/**
* sortBy {
* type: '',
* index: '',
* order: '' // asc/desc
* }
*/
var sort = function (data, sortBy) {
if (data.children != null) {
// sort all children here, but how?
var result = null;
for (var i = 0; result == null && i < data.children.length; i++) {
result = search(data.children[i], sortBy);
}
return result;
}
return null;
}
[ 'data.children.sort(...)'](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort)? – Bergi