父子关系的数组和树形结构数据相互转化
父子关系的数组和树形结构数据相互转化
/**
* @description 父子关系的数组转换成树形结构数据
* @param data
* @returns {*}
*/
export function translateDataToTree(data) {
const parent = data.filter(
(value) => value.parentId === "undefined" || value.parentId == null
);
const children = data.filter(
(value) => value.parentId !== "undefined" && value.parentId != null
);
const translator = (parent, children) => {
parent.forEach((parent) => {
children.forEach((current, index) => {
if (current.parentId === parent.id) {
const temp = JSON.parse(JSON.stringify(children));
temp.splice(index, 1);
translator([current], temp);
typeof parent.children !== "undefined"
? parent.children.push(current)
: (parent.children = [current]);
}
});
});
};
translator(parent, children);
return parent;
}
/**
* @description 树形结构数据转换成父子关系的数组
* @param data
* @returns {[]}
*/
export function translateTreeToData(data) {
const result = [];
data.forEach((item) => {
const loop = (data) => {
result.push({
id: data.id,
name: data.name,
parentId: data.parentId,
});
const child = data.children;
if (child) {
for (let i = 0; i < child.length; i++) {
loop(child[i]);
}
}
};
loop(item);
});
return result;
}
参考:
https://github.com/chuzhixin/vue-admin-beautiful
顺便推荐一下这个vue-admin-beautiful,一款基于vue+element-ui的绝佳的中后台前端开发管理框架(基于vue/cli 4 最新版,同时支持电脑,手机,平板),他同时是拥有100+页面的大型vue前端单页应用。