树形结构转平面结构
let data = [
{
id: 1, pid: 0, name: '沃尔玛',
childrens: [
{
id: 2, pid: 1, name: '生鲜区',
childrens: [
{
id: 4,
pid: 2,
name: '鱼',
childrens:[
{
id:8,
pid:4,
name:'金鱼',
},
{
id:9,
pid:4,
name:'带鱼',
}
]
},
{ id: 5, pid: 2, name: '牛肉' }
]
},
{
id: 3, pid: 1, name: '日用品区',
childrens: [
{ id: 6, pid: 3, name: '卫生纸' },
{ id: 7, pid: 3, name: '牙刷' }
]
}
]
}
];
function tree(arr) {
var newarr = [];
arr.forEach(item => {
if (item.childrens) {
newarr.push(...tree(item.childrens))
delete item.childrens
}
newarr.push({ ...item })
});
return newarr
};
var way = tree(data);
console.log(way);
平面结构转树形结构
const source = [
{ id: 1, pid: null, name: '一级' },
{ id: 2, pid: 1, name: '二级' },
{ id: 3, pid: 1, name: '二级' },
{ id: 4, pid: 2, name: '三级' },
{ id: 5, pid: 2, name: '三级' },
{ id: 6, pid: 3, name: '三级' },
{ id: 7, pid: 3, name: '三级' },
{ id: 8, pid: 7, name: '四级' },
{ id: 9, pid: 7, name: '四级' }
];
function arrt(arr, pid = null) {
const res = [];
source.forEach(item => {
if (item.pid === pid) {
const children = arrt(arr.filter(e => e.pid != pid), item.id)
if (children.length) {
res.push({ ...item, children })
} else {
res.push({ ...item })
}
}
});
return res
}
var tree = arrt(source);
console.log(tree);