js分层数据处理?

下面的数据是部门的数据,parentid决定着部门的上下级。假定已经拿到数据库中的数组,怎么通过js处理变成下面这种上下级结构的?

[
    {
        parentid:0,
        name:‘春树集团’,
        children:[{...}]
}
]

image.png

阅读 1.7k
3 个回答

遍历一下就行了。

const data = [{id:1, parentId: 0}, {id: 2, parentId: 1}]; // 源数据
const dataMap = {1: data[0], 2: data[1]}; // 将源数据转换为key/value形式,用id做key,这个自己能写吧
const rootList = [];
data.map(item => {
    if (! item.parentId) {
        rootList.push(item);
    } else {
        if (dataMap[item.parentId].children === undefined) {
            dataMap[item.parentId].children = [];
        }
        dataMap[item.parentId].children.push(item);
    }
});

好了,rootList就是你要的。
[{"id":1,"parentId":0,"children":[{"id":2,"parentId":1}]}]

const data = [{
    id: 1,
    parentId: 0
}, {
    id: 2,
    parentId: 0
}, {
    id: 3,
    parentId: 2
}, {
    id: 4,
    parentId: 3
}];
const array2tree = (arr, parent = 0) => {
    let result = [];
    arr.forEach(item => {
        if (parent !== item.parentId) return;
        result.push({
            ...item,
            children: array2tree(arr, item.id)
        })
    });
    return result;
}
console.log(array2tree(data));

递归处理一下就好了

推荐问题
宣传栏