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「'後。第二次調用函數通過遞歸發生''文件夾12「'元素移除。當第三次調用該函數時,文件夾「9」沒有包含子項。 –
由於'文件夾9'是一個文件夾,並有父''',並根據您的條件'if(item.parent ===「#」&& item.type!==「文件夾」){ return item; }它的返回項目。問題只發生在那些位於根目錄的文件夾中 –