JS中List轉Tree,Tree轉List

數據源準備

let tree = [
    { id: 1, pid: 'root', name: '1' },
    { id: 2, pid: 1, name: '2' },
    { id: 3, pid: 1, name: '3' },
    { id: 4, pid: 'root', name: '4' },
    { id: 5, pid: 4, name: '4' },
    { id: 6, pid: 4, name: '5' },
    { id: 7, pid: 3, name: '7' },
    { id: 8, pid: 4, name: '8' },
]

List轉Tree

function treeData(data) {
    let cloneData = JSON.parse(JSON.stringify(data))
    return cloneData.filter(father => {
        let branchArr = cloneData.filter(child => father['id'] == child['pid']);
        branchArr.length > 0 ? father['children'] = branchArr : '';
        return father['pid'] == 'root';
    })
}


var newTree = treeData(tree)
console.log(newTree);

Tree轉List

function ListData(data,pid) {
    return data.reduce((arr, { id, name, children = [] }) =>
        arr.concat([{ id, name, pid }], ListData(children, id)), [])
}

var newList = ListData(newTree,'root');
console.log(newList)

結果:

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章