SOURCE

const projects = [
    {
        name: 'Project A',
        modules: [
            {
                name: 'Core',
                version: '1.0.0',
            },
            {
                name: 'UI',
                modules: [
                    {
                        name: 'Button',
                        version: '1.2.0',
                    },
                    {
                        name: 'Modal',
                        modules: [
                            {
                                name: 'Confirm',
                                version: '1.2.3',
                            },
                        ],
                    },
                ],
            },
        ],
    },
    {
        name: 'Project B',
        modules: [
            {
                name: 'Auth',
                version: '2.0.0',
            },
        ],
    },
];

// 输出:

[
    { project: 'Project A', module: 'Core', version: '1.0.0' },
    { project: 'Project A', module: 'Button', version: '1.2.0' },
    { project: 'Project A', module: 'Confirm', version: '1.2.3' },
    { project: 'Project B', module: 'Auth', version: '2.0.0' },
]

function treeTolist(tree) {
    const res = []
    const dfs = (node, root) => {
        if (node.modules) {
            res.push({ project: root.name, module: node.name, version: node.version })
            node.modules.forEach((child) => dfs(child, root))
        }

    }
    tree.forEach((item) => dfs(item, item))

    return res
}
console.log(treeTolist(projects))

console 命令行工具 X clear

                    
>
console