/**
* 该方法用于将有父子关系的数组转换成树形结构的数组
* 接收一个具有父子关系的数组作为参数
* 返回一个树形结构的数组
*/
translateDataToTree(data){
// 没有父节点的数据
let parents = data.filter(value => value.upperCompanyCode == 0);
// 有父节点的数据
let children = data.filter(value => value.upperCompanyCode !== 'undefined' && value.upperCompanyCode != null);
// 定义转换方法的具体实现
let translator = (parents,children) => {
// 遍历父节点数据
parents.forEach((parent) => {
// 遍历子节点数据
children.forEach((current,index) => {
// 此时找到父节点对应的一个子节点
if(current.upperCompanyCode === parent.comCode){
// 对子节点数据进行深拷贝,这里只支持部分类型
let temp = JSON.parse(JSON.stringify(children));
// 让当前子节点从temp中移除,temp作为新的子节点数据,这里是为了递归时,子节点的遍历次数更少,如果父子关系的层级越多,越有利
temp.splice(index,1);
// 让当前子节点作为唯一的父节点,去递归查找其对应的子节点
translator([current], temp);
typeof parent.children !== 'undefined' ? parent.children.push(current) : parent.children = [current]
}
})
})
};
// 调用转换方法
translator(parents,children);
// 返回结果
return parents;
},