/**
* 包含parentId的数组转成树形结构数组
* @param data 原始数据数组
* @param idName ID属性名称
* @param parentIdName 父ID属性名称
* @returns {[]}
*/
const listToTree = function (data, idName, parentIdName) {
if (!idName) {
idName = 'id';
}
if (!parentIdName) {
parentIdName = 'parentId';
}
// * 先生成parent建立父子关系
const obj = {};
data.forEach((item) => {
obj[item[idName]] = item;
});
const parentList = [];
data.forEach((item) => {
// item.hasChildren = false;
const parent = obj[item[parentIdName]];
if (parent) {
// * 当前项有父节点
parent.children = parent.children || [];
parent.children.push(item);
// parent.hasChildren = true;
} else {
// * 当前项没有父节点 -> 顶层
parentList.push(item);
}
});
return parentList;
}