单层数组生成树状结构

let account_subject_list = [
            {
                "subject": "1221",
                "name": "其他",
                "parent": "",
            },
            {
                "subject": "1221.01",
                "name": "单位",
                "parent": "1221",
            },
            {
                "subject": "1231.01",
                "name": "其他款",
                "parent": "1231",
            },
            {
                "subject": "2221",
                "name": "应交费",
                "parent": "",
            },
            {
                "subject": "2221.01",
                "name": "税",
                "parent": "2221",
            },
            {
                "subject": "2221.01.01",
                "name": "税额",
                "parent": "2221.01",
            },
            {
                "subject": "2221.01.02",
                "name": "税额-02",
                "parent": "2221.01",
            },
            {
                "subject": "2221.01.02.01",
                "name": "税额-02.01",
                "parent": "2221.01.02",
            }
        ]

        /**
     * 单层数组生成树状结构
     */
        function getTree(list) {
            const tree = {}
            const arr = []
            list.forEach((item, index) => {
                tree[item.subject] = item;  //浅拷贝 item
                // tree[item.subject] = JSON.parse(JSON.stringify(item));
                console.log(index, tree) //循环从第一次就走完,输出的结果是最后一次循环
            })
            list.forEach(item => {
                if (!tree[item.parent]) {
                    arr.push(item)
                } else {
                    tree[item.parent].children = tree[item.parent].children || []
                    tree[item.parent].children.push(item)
                }
            })
            return arr
        }

        const tree = getTree(account_subject_list)

        console.log('tree', tree)

 

posted @ 2020-11-11 18:34  日升月恒  阅读(147)  评论(0)    收藏  举报