1、树型数据====>平级结构
// 示例数据
const treeData = [
{
uuid: '1',
label: '1',
children: [
{ uuid: '1-1', p_uuid: '1', label: '1-1' },
{ uuid: '1-2', p_uuid: '1', label: '1-2' },
{ uuid: '1-3', p_uuid: '1', label: '1-3' },
],
},
{
uuid: '2',
label: '2',
children: [
{ uuid: '2-1', p_uuid: '2', label: '2-1' },
{ uuid: '2-2', p_uuid: '2', label: '2-2' },
{ uuid: '2-3', p_uuid: '2', label: '2-3' },
],
},
];
const toArr = (tree) => {
let arrs = [];
let result = [];
arrs = arrs.concat(tree);
// 把数组中每一项全部拉平
while (arrs.length) {
let first = arrs.shift(); // 弹出第一个元素
// 直到每一项数据都没有children
if (first.children) {
//如果有children
arrs = arrs.concat(first.children);
delete first['children'];
}
result.push(first);
}
return result;
};
console.log(toArr(treeData))
结果如下:
2、平级结构转树型结构
// 示例数据
const listData = [
{ uuid: '1', label: '1' },
{ uuid: '2', label: '2' },
{ uuid: '1-1', p_uuid: '1', label: '1-1' },
{ uuid: '1-2', p_uuid: '1', label: '1-2' },
{ uuid: '1-3', p_uuid: '1', label: '1-3' },
{ uuid: '2-1', p_uuid: '2', label: '2-1' },
{ uuid: '2-2', p_uuid: '2', label: '2-2' },
{ uuid: '2-3', p_uuid: '2', label: '2-3' },
];
const toTree = (list) => {
let result = [];
let map = {};
// 把每一项数据都存储在map中,map的键值为每项的uuid
list.forEach(function (item) {
if (item.children) {
delete item.children;
}
map[item.uuid] = item;
});
list.forEach(function (item) {
let parent = map[item.p_uuid];
// 取出每项的parent 如果有父级添加到父级的children下 第一个child时得给children赋值为空数组
if (parent) {
(parent.children || (parent.children = [])).push(item);
} else {
// 否则push在结果中
result.push(item);
}
});
return result;
};
console.log(toTree(treeData))
结果如下: