js 将数组对象按分类转为树形结构

有如下数据结构,例如:

var industry_list =[
    {
        "parent_ind" : "女装",
        "name" : "连衣裙"
    },
    {
        "name": "女装"
    },
    {
        "parent_ind" : "女装",
        "name" : "半身裙"
    },
    {
        "parent_ind" : "女装",
        "name" : "A字裙"
    },
    {
        "name": "数码"
    },
    {
        "parent_ind" : "数码",
        "name": "电脑配件"
    },
    {
        "parent_ind" : "电脑配件",
        "name": "内存"
    },
    {
        "parent_ind" : "数码",
        "name": "CPU"
    },
    {
        "parent_ind" : "电脑配件",
        "name": "GPU"
    },
    
    ]

为了取用方便,我们希望可以将其转换为树状格式,例如:

{
    "女装": {
        "连衣裙": {},
        "半身裙": {},
        "A字裙": {}
    },
    "数码": {
        "电脑配件": {
            "内存": {},
            "GPU": {}
        },
        "CPU": {}
    }
}

实现一个方法完成这个转换,如下:主要用到修改引用类型地址


微信图片_20200513150623.png
function convert_forma( data ) {
    let cache = {};
    let _data = {};
    let parent_arr = [], child_arr = [];
    for( let arr of data ) {
        (arr.parent_ind ? child_arr : parent_arr).push(arr);
    }
    while( parent_arr.length || child_arr.length ) {
        
        if( parent_arr.length ) {
            let first = parent_arr.shift();
            _data[first.name] = {};
            cache[ first.name ] = _data[first.name];

        } else {
            let first = child_arr.shift();
            if( first.parent_ind in cache ) {
                cache[ first.parent_ind ][ first.name ] = {};
                 //通过引用类型赋值,修改指向地址
                cache[ first.name ] = cache[ first.parent_ind ][ first.name ];
            }else{
                child_arr.push(first)
            }

        }
    }
    cache=null;
    return _data;
}
console.log(convert_forma( industry_list))

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容