1
サーバからのデータをflat tree
の形式で取得します。そして、ツリーを構築するデータJsTree
ライブラリを私に転送します。 データを送信する前にJsTree
データをフィルタリングし、子を持たないタイプfolder
の空の要素を削除します。ここで配列の子を持たないすべての要素を削除する
は、私が得たいくつかのコードです:ここでは
dataFilter: function (jsonString) {
function getItemList(item, list) {
if (item === null) {
return null;
}
if (item.parent === "#" && item.type !== "folder") {
return item;
} else {
if (item.type === "folder") {
var itemFolder = _.findWhere(list, { parent: item.id });
if (itemFolder) {
return item;
}
} else {
return item;
}
}
return null;
};
function removeEmptyFolder(list) {
console.log(list);
var treeListTemp = [];
for (var i = 0; i < list.length; i++) {
treeListTemp.push(getItemList(list[i], list));
}
var treeList = [];
for (var j = 0; j < treeListTemp.length; j++) {
var k = getItemList(treeListTemp[j], treeListTemp);
if (k === null) {
removeEmptyFolder(_.filter(treeListTemp,
function(item) {
return item !== null;
}));
} else {
treeList.push(k);
}
}
//console.log(treeList);
return treeList;
};
return JSON.stringify(_.filter(removeEmptyFolder(JSON.parse(jsonString)),
function (item) {
return item !== null;
}));
}
は、このコードは、ほぼ右働く作業例https://jsfiddle.net/nkqgot2a/11/
です。しかし、最後の要素に子が含まれている場合、それはリストから削除されません。要素「フォルダ9」は、データフィルタリング後にリストに表示されるべきではありません。
空のフォルダをすべて削除するように機能を修正する方法を教えてください。
これまでのところ、再帰は時間が過ぎていると思われます。
' "フォルダ9"' ___does___が持っている子供たちに多くの変更を行いました。 ''フォルダ12 "' 'の親は' '38" 'であり、これは' "フォルダ9" 'です。それは空ではないので、削除されません。 – Cerbrus
@Cerbrus最初の関数呼び出しの後、 'removeEmptyFolder'は、要素"フォルダ11 "を削除します。 2回目の呼び出しが再帰を介して機能した後、フォルダ "12"の要素が削除されます。この関数が3回目に呼び出されると、アイテム ""フォルダ9 "には子が含まれていません。 –
'folder 9'はフォルダで親 '#'があり、あなたの状態に応じて 'if(item.parent ==="# "&& item.type!==" folder "){ return item; } 'その返品アイテム。ルートにあり、emplyであるフォルダだけに問題が起きています –