js实现多叉树 js多叉树遍历 js实现删除该文件及其所有的子级文件

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

js如何实现删除某个文件及其所有的子级文件、子级的子级文件…
js如何通过递归实现多叉树的遍历呢?


一、实现的效果/功能

在这里插入图片描述

说明:删除图片这个目录及其所有的子级目录

二、如何实现?

1.首先看一下数据表的数据机构:

//部分代码

const arr = [
    {
    
    
        "_id": "60e66c854cb0900001598c46",
        "father_id": "//:",
        "file": {
    
    
            "name": "图片",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625713795988,
        "sort": 100
    },
    {
    
    
        "_id": "60e66c8bacc1cf00011fff2f",
        "father_id": "60e66c854cb0900001598c46",
        "file": {
    
    
            "name": "imgs",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625713802650,
        "sort": 100
    },
    {
    
    
        "_id": "60e66c92e22fbe0001adf45f",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "2.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/f7ae9b6e-3e06-4b88-9587-61e54c4f9dfa.jpg",
            "size": 22288
        },
        "createTime": 1625713809055
    },
    {
    
    
        "_id": "60e6770dacc1cf0001203d50",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "4.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/a2a84ea2-5945-4bb1-b9c7-065e7246cd8b.jpg",
            "size": 25730
        },
        "createTime": 1625716492032
    },
    {
    
    
        "_id": "60e69e7cf6a398000198098b",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "3.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/13da3630-a1e7-45cf-9e15-d137cb23f22d.jpg",
            "size": 16885
        },
        "createTime": 1625726586149
    }
    {
    
    
        "_id": "60e6772eacc1cf0001203e1b",
        "father_id": "60e677249dad8500018b082c",
        "file": {
    
    
            "name": "微信图片_20210706115238.png",
            "fileType": "image/png",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/19b5dccd-d66f-4471-9475-fc4f56a74bbe.png",
            "size": 34141
        },
        "createTime": 1625716525580
    }
]

结构说明:每一条数据都有一个"_id"以及“father_id”,"_id"是每条数据的id具有唯一性(相当于主键),“father_id"是上级目录的”_id"

2.具体实现代码(全部代码)

//这是从数据表中随便复制的几条数据
const arr = [
    {
    
    
        "_id": "60e66c854cb0900001598c46",
        "father_id": "//:",
        "file": {
    
    
            "name": "图片",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625713795988,
        "sort": 100
    },
    {
    
    
        "_id": "60e66c8bacc1cf00011fff2f",
        "father_id": "60e66c854cb0900001598c46",
        "file": {
    
    
            "name": "imgs",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625713802650,
        "sort": 100
    },
    {
    
    
        "_id": "60e66c92e22fbe0001adf45f",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "2.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/f7ae9b6e-3e06-4b88-9587-61e54c4f9dfa.jpg",
            "size": 22288
        },
        "createTime": 1625713809055
    },
    {
    
    
        "_id": "60e6770dacc1cf0001203d50",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "4.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/a2a84ea2-5945-4bb1-b9c7-065e7246cd8b.jpg",
            "size": 25730
        },
        "createTime": 1625716492032
    },
    {
    
    
        "_id": "60e69e7cf6a398000198098b",
        "father_id": "60e66c8bacc1cf00011fff2f",
        "file": {
    
    
            "name": "3.jpg",
            "fileType": "image/jpeg",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/13da3630-a1e7-45cf-9e15-d137cb23f22d.jpg",
            "size": 16885
        },
        "createTime": 1625726586149
    },
    {
    
    
        "_id": "60e677165c44840001087275",
        "father_id": "60e66c854cb0900001598c46",
        "file": {
    
    
            "name": "icons",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625716500940,
        "sort": 100
    },
    {
    
    
        "_id": "60e6771b8a69dc0001e4b35a",
        "father_id": "60e677165c44840001087275",
        "file": {
    
    
            "name": "1.png",
            "fileType": "image/png",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/725bdbb1-15fd-451b-84c7-9b4fe9c1eae0.png",
            "size": 118235
        },
        "createTime": 1625716506809
    },
    {
    
    
        "_id": "60e677249dad8500018b082c",
        "father_id": "//:",
        "file": {
    
    
            "name": "musics",
            "fileType": "fileder",
            "url": "",
            "size": "未知"
        },
        "createTime": 1625716515809,
        "sort": 100
    },
    {
    
    
        "_id": "60e6772eacc1cf0001203e1b",
        "father_id": "60e677249dad8500018b082c",
        "file": {
    
    
            "name": "微信图片_20210706115238.png",
            "fileType": "image/png",
            "url": "https://vkceyugu.cdn.bspapp.com/VKCEYUGU-a3eacf9e-6821-4c0d-b2ca-3efa3779ac92/19b5dccd-d66f-4471-9475-fc4f56a74bbe.png",
            "size": 34141
        },
        "createTime": 1625716525580
    }
]
//装取其目录下的所有子级数据
let alls = [];
/**
 * 通过id查找其子级以及子级的子级以及...
 * @param {Arrow} directory 当前目录
 * @param {*} count 
 */
function gets(directory, count = 2) {
    
    
    let temp = [];//用于装取当前_id下的子级元素
    directory.forEach(ite => {
    
    
        arr.forEach((item, index) => {
    
    
            // 判断数据中是否有当前的子级元素
            if (item.father_id == ite._id) {
    
    
                temp.push(item);
                // 性能优化:如果当前文件不是文件夹类型,就将其删除,减少后面arr的遍历。
                // item.file.fileType != 'fileder' ? arr.splice(index, 1) : '';
            }
        });
    })
    alls.push(...temp);
    if (temp.length > 0) {
    
    
        // 判断是否第一次进来,如果不是则删除temp中的第一项(因为第一项已经遍历完成);
        if (count != 1) {
    
    
            temp.splice(0, 1);
        }
        // 递归  将子级进行递归取值
        gets(temp);
    }
}
gets([arr[0]], 1);

// console.log(alls);
// console.log(alls.length);

alls.forEach(item => {
    
    
    // 查看其 所有子级的name
    console.log(item.file.name);
});

总结

实现起来也并不是太难,主要是需要有清晰的逻辑以及对一些基础语法的掌握(如:递归级循环);

猜你喜欢

转载自blog.csdn.net/z1783883121/article/details/118573655