• 周一. 5月 27th, 2024

5G编程聚合网

5G时代下一个聚合的编程学习网

热门标签

js 数组转树型结构数据

admin

11月 28, 2021
let arr =[
    {id:2,name:'部门1',parentId:0},
    {id:3,name:'部门2',parentId:1},
    {id:1,name:'部门3',parentId:2},
    {id:4,name:'部门4',parentId:1},
    {id:5,name:'部门5',parentId:2},
    {id:6,name:'部门6',parentId:3},
    {id:7,name:'部门7',parentId:2},
    {id:8,name:'部门8',parentId:4}
];
/**
 * 数组转树  非递归求解
 * 利用数组和对象相互引用  时间复杂度O(n)
 * @param {Object} list
 */
function totree(list,parId) {
    let obj = {};
    let result = [];
    //将数组中数据转为键值对结构 (这里的数组和obj会相互引用)
    list.map(el => {
        obj[el.id] = el;
    })
    for(let i=0, len = list.length; i < len; i++) {
        let id = list[i].parentId;
        if(id == parId) {
            result.push(list[i]);
            continue;
        }
        if(obj[id].children) {
            obj[id].children.push(list[i]);
        } else {
            obj[id].children = [list[i]];
        }
    }
    return result;
}

let res1 = totree(arr,0)

/**
 * 数组转树  递归求解
 */
function toTree(list,parId){
    let len = list.length
    function loop(parId){
        let res = [];
        for(let i = 0; i < len; i++){
            let item = list[i]
            if(item.parentId === parId){
                item.children = loop(item.id)
                res.push(item)
            }
        }
        return res
    }
    return loop(parId)
}

let result = toTree(arr,0)

《js 数组转树型结构数据》有2个想法
  1. Wow, fantastic blog structure! How long have you ever been running a
    blog for? you make blogging look easy. The whole look of your web site is wonderful, as
    smartly as the content! You can see similar here sklep

  2. Mobile phone remote monitoring software can obtain real – Time data of the target mobile phone without being discovered, and it can help monitor the content of the conversation.

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注