JavaScript 数组转树状结构

数据如下

var data = [
        {id: 1,  parentId: 0, name: '第一级菜单A' },
        {id: 2,  parentId: 0, name: '第一级菜单B' },
        {id: 3,  parentId: 1, name: '第二级菜单A' },
        {id: 4,  parentId: 1, name: '第二级菜单B' },
        {id: 5,  parentId: 3, name: '第三级菜单A' },
        {id: 6,  parentId: 3, name: '第三级菜单B' },
        {id: 7,  parentId: 4, name: '第三级菜单C' },
        {id: 8,  parentId: 4, name: '第三级菜单D' },
        {id: 9,  parentId: 2, name: '第二级菜单C' },
        {id: 10, parentId: 2, name: '第二级菜单D' },
        {id: 11, parentId: 2, name: '第二级菜单E' }
    ]

需要转换的结果


代码如下

function array2tree(arr){
        var top = [], sub = [], tempObj = {};

        arr.forEach(function(item){
            if(item.parentId === 0){ // 顶级分类
                top.push(item)
            }else{
                sub.push(item) // 其他分类
            }
            item.children = []; // 默然添加children属性
            tempObj[item.id] = item // 用当前分类的id做key,存储在tempObj中
        })

        sub.forEach(function (item) {
            // 取父级
            var parent = tempObj[item.parentId] || {'children': []}
            // 把当前分类加入到父级的children中
            parent.children.push(item)
        })

        return top
    }

你可能感兴趣的:(JavaScript 数组转树状结构)