父子關系的數組和樹形結構數據相互轉化
/**
* @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前端單頁應用。