/**
* 扁平数据结构转换为树型结构
*
* @param {Array} list 扁平数据结构
* @param {String} parentId 关联父级id的字段名
* @param {String} childName
* @returns {Object} 返回树型结构
*/
listToTree: (list, parentId = "parentId", childName = "children") => {
const res = [];
const map = list.reduce((res, v) => ((res[v.id] = v), res), {});
for (const item of list) {
if (item[parentId] === null) {
res.push(item);
continue;
}
if (item[parentId] in map) {
const parent = map[item[parentId]];
parent[childName] = parent[childName] || [];
parent[childName].push(item);
}
}
return res;
},
// 树形拍平
getNode(treeData) {
const flatData = [];
function flatten(node, parent) {
const flatNode = { ...node };
flatNode.parentId = parent;
flatData.push(flatNode);
if (node.children) {
node.children.forEach((child) => {
flatten(child, node.id);
});
delete flatNode.children;
}
}
treeData.forEach((node) => {
flatten(node, null);
});
return flatData;
},