FileTree

2017/01/22 javaScript,FileTree,根据文件路径生成文件树

文件树的生成

1、使用 Map 过滤相同文件名称

        function urlListMap (data) {
        let map = new Map();
        data.forEach((items)=> {
        let name = items.name;
        var split = name.split('/');
        split.forEach((split_item, index)=> {

        if (Utils.isNull(split_item))
        split_item = '根目录';

        let hasName = map.has(index + '-' + split_item);
        if (hasName) {
        let d = map.get(index + '-' + split_item);
        let item = d.item_id;
        item[item.length] = items.id;
        d['item_id'] = item;
        map.set(index + '-' + split_item, d);
        } else {
        let d = {};
        let item = [];
        item[0] = items.id;
        d['id'] = index;
        d['item_id'] = item;
        d['name'] = split_item;
        // d['child'] = [];
        map.set(index + '-' + split_item, d);
        }


        })
        });

        return map;
        }

2、使用递归来生成JSON格式数据

        function dataToTree (data, itemId, parent_id) {
        var ret = [];
        data.forEach((item)=> {
        if (item.id == parent_id) {
        let hasItemId = intersectionItemId(item.item_id, itemId);
        if (hasItemId) {
        item.children = dataToTree(data, item.item_id, item.id + 1);
        ret.push(item);//把当前项保存到临时数组中
        }
        }
        });
        return ret;
        },


        function intersectionItemId (a, b) {
        var hasInter = false;
        if (b.length == 0)
        return true;
        a.forEach((item)=> {
        b.forEach((itemId)=> {
        if (item == itemId) {
        hasInter = true;
        return true;
        }
        });

        });
        return hasInter;
        },

具体请查看 FileFree.js

效果:

文件树效果

Demo地址:https://github.com/xiaoxiaoying/FileTree