<分区>
我以扁平树
的形式从服务器获取数据。然后我将构建树的数据 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/
这段代码几乎可以正常工作。但是,如果最后一个元素包含一个子元素,则它不会从列表中删除。数据过滤后,元素“folder 9”不应出现在列表中。
请告诉我如何修复我的函数以便删除所有空文件夹?
到目前为止,在我看来,递归是由过多的时间引起的。