const mockData = [
{
pid: null,
id: 2
},
{
pid: null,
id: 3
},
{
pid: 3,
id: 4
},
{
pid: 6,
id: 5
},
{
pid: 4,
id: 6
}
]
function toTree(data = [], pid = 'pid', id = 'id', childKey = 'children') {
// 深拷贝不影响数据源
let newData = JSON.parse(JSON.stringify(data))
// 删除属性
newData = newData.map(v => { delete v[childKey]; return v })
// 通过id转成对象结构保存值,堆储存关系构成链式关系
let obj = newData.reduce((a, b) => { return { ...a, [b[id]]: b } }, {})
let newArray = []
for (let v of newData) {
const parantData = obj[v.pid]
if (parantData) {
(parantData[childKey] || (parantData[childKey] = [])).push(v)
} else {
newArray.push(v)
}
}
return newArray
}
console.log(toTree(mockData))
JS实现树结构数据转换
最新推荐文章于 2024-05-21 14:15:14 发布