您当前的位置: 首页 > 

【03】

暂无认证

  • 0浏览

    0关注

    196博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

js组合树排序与拆分

【03】 发布时间:2021-05-26 20:10:22 ,浏览量:0

本周工作项目中应用到的基本算法总结;组树结构并且排序、将树拆分并给排序字段、同类型合并

1、组树结构并且排序

数据

const view = [
    {
        "id": 222,
        "pid": 0,
        "component": "reimburseer",
        "order": 1
    },
    {
        "id": 1133,
        "pid": 1122,
        "component": "summary",
        "order": 4
    },
    {
        "id": 1122,
        "pid": 0,
        "component": "travel_type",
        "order": 3
    },
    {
        "id": 1144,
        "pid": 1122,
        "component": "travel_list",
        "order": 3
    },
    {
        "id": 1155,
        "pid": 1122,
        "component": "custom_attach",
        "order": 2
    },
    {
        "id": 111,
        "pid": 0,
        "component": "commiter",
        "order": 3
    },
    {
        "id": 444,
        "pid": 0,
        "component": "department",
        "order": 2
    }
]

算法

function processingTemplate(view) {
    const treeView = []
    // 初始化匹配map
    const vMap = view.reduce((m, item) => {
        item.children = []
        m[item.id] = item
        return m
    }, {})
    for (let i = 0; i  a.order - b.order)
        } else {
            treeView.push(view[i])
        }
    }
    return treeView.sort((a, b) => a.order - b.order)
}
const resultTreeView = processingTemplate(view)
console.log(resultTreeView)

结果

2、将树拆分并给排序字段

数据

const viewTreeData = [
    {
        "id": 222,
        "pid": 0,
        "component": "reimburseer"
    },
    {
        "id": 444,
        "pid": 0,
        "component": "department"
    },
    {
        "id": 1122,
        "pid": 0,
        "component": "travel_type",
        "children": [
            {
                "id": 1155,
                "pid": 1122,
                "component": "custom_attach"
            },
            {
                "id": 1144,
                "pid": 1122,
                "component": "travel_list"
            },
            {
                "id": 1133,
                "pid": 1122,
                "component": "summary"
            }
        ]
    },
    {
        "id": 111,
        "pid": 0,
        "component": "commiter"
    }
]

算法

function saveTemplate(treeView) {
    const view = []
    function extractData(arr, pid) {
        let order = 1
        for (let i = 0; i  {
        if (!m[i.field]) {
            m[i.field] = [i]
        } else {
            m[i.field].push(i)
        }
        return m
    }, {})
}
const resultOptionMap = combinationField(options)
console.log(resultOptionMap)

结果

关注
打赏
1657344724
查看更多评论
立即登录/注册

微信扫码登录

0.0406s