fnFlatDataHasParentToTree缺少排序,导致从后端返回的节点顺序错乱
Closed this issue · 1 comments
`//增加Sort排序
const fnPermissionSort = (permessionA:any, permessionB:any) => {
if (permessionA.orderNum < permessionB.orderNum) {
return -1
}
if (permessionA.orderNum > permessionB.orderNum) {
return 1
}
return 0
}`
`const fnFlatDataHasParentToTree = function translateDataToTree(data: any[], fatherId = 'fatherId'): any {
//没有父节点的数据
let parents = data.filter(value => value[fatherId] === null || value[fatherId] === '');
parents.sort(fnPermissionSort);//增加父级节点的排序
//有父节点的数据
let children = data.filter(value => value[fatherId] !== null && value[fatherId] !== '');
//定义转换方法的具体实现
let translator = (parents: any[], children: any[]): any => {
//遍历父节点数据
parents.forEach(parent => {
//遍历子节点数据
children.forEach((current, index) => {
//此时找到父节点对应的一个子节点
if (current[fatherId] === parent.id) {
//对子节点数据进行深复制,这里只支持部分类型的数据深复制,对深复制不了解的童靴可以先去了解下深复制
let temp = JSON.parse(JSON.stringify(children));
//让当前子节点从temp中移除,temp作为新的子节点数据,这里是为了让递归时,子节点的遍历次数更少,如果父子关系的层级越多,越有利
temp.splice(index, 1);
//让当前子节点作为唯一的父节点,去递归查找其对应的子节点
translator([current], temp);
//把找到子节点放入父节点的children属性中
typeof parent.children !== 'undefined' ? parent.children.push(current) : (parent.children = [current]);
}
});
});
children.sort(fnPermissionSort);//增加子级排序
};
//调用转换方法
translator(parents, children);
return parents;
};`
@wen2204 hi ,您可以自行添加排序方法。 如果有任何疑问,请重新打开此issues