vue数组变为tree数据结构

72 阅读1分钟
<template>
    <div>

    </div>
</template>

<script setup>
const data = [

    { id: '01', lable: '项目经理', pid: '' },

    { id: '02', lable: '产品leader', pid: '01' },

    { id: '03', lable: 'UIleader', pid: '01' },

    { id: '04', lable: '技术leader', pid: '01' },

    { id: '05', lable: '测试leader', pid: '01' },

    { id: '06', lable: '运维leader', pid: '01' },

    { id: '07', lable: '产品经理', pid: '02' },

    { id: '08', lable: '产品经理', pid: '02' },

    { id: '09', lable: 'UI设计师', pid: '03' },

    { id: '10', lable: '前端工程师', pid: '04' },

    { id: '11', lable: '后端工程师', pid: '04' },

    { id: '12', lable: '后端工程师', pid: '04' },

    { id: '13', lable: '测试工程师', pid: '05' },

    { id: '14', lable: '测试工程师', pid: '05' },

    { id: '15', lable: '运维工程师', pid: '06' }

]
function toTree(data) {
    const tree = [],obj = {}
    data.forEach(element => {
        // 浅拷贝
        obj[element.id] = element;
        obj[element.id].children = [];
    });
    data.forEach(element => {
        if(element.pid){
            obj[element.pid].children.push(element)
        }else{
            tree.push(element)
        }
    });
    return tree
}
console.log(toTree(data));
</script>

<style lang="scss" scoped>

</style>