使用 27x26 创建文件夹结构,即所有字母表的深度为 26

Creating folder structure with 27x26 i.e of all alphabet with 26 deep level

我想创建文件夹结构 27X26 即

A/A/B..Z
B/A/B..Z
C/A/B..Z
.
.
Z/A/B..Z

我正在尝试以下代码,但它不起作用。

var fs=require('fs'),
    path=require('path');

var arr=['A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'];
var itr=0;

function createAtZ(pth){
    if(pth){
        if(itr<676){
            for(let i=0;i<26;i++){
                dir = path.join(__dirname,pth+'/'+arr[i]);
                if (!fs.existsSync(dir)){
                    fs.mkdirSync(dir);
                }
            }
            for(let i=0;i<26;i++){
                createAtZ(pth+'/'+arr[i])
            }
        }
    }
    itr++;
}
for(var i=0;i<26;i++){
    createAtZ('./');
}

它只在 A 目录中创建子文件夹。

let fs = require("fs");
let path = require("path");

function getLetter(n) {
    return String.fromCharCode("A".charCodeAt(0) + n);
}

function createDirIfNotExist(dir) {
    if (!fs.existsSync(dir)) {
        fs.mkdirSync(dir);
    }
}

function createAt(dir) {
    dir = path.join(__dirname, dir);
    createDirIfNotExist(dir);
    for (let i = 0; i < 26; i++) {
        dir = path.join(dir, getLetter(i));
        createDirIfNotExist(dir);
    }
}

for (let i = 0; i < 26; i++) {
    createAt(getLetter(i));
}

getLetter 函数允许您获取每个字母而无需输入每个字母。 createAt 从给定文件夹开始创建 A/B/.../Z 结构。底部的循环在每个字母 A..Z.

上调用 createAt

在您的代码中,itr 是一个全局变量。如果循环的每次迭代都使用一个变量 0...26 而不是全局变量 0...676,将会更加清晰和简单。您正在尝试使用递归,但如果您想这样做,您应该只在每次迭代结束时调用 createAtZ 一次。例如:

function createAt(dir) {
    dir = path.join(__dirname, dir);
    createDirIfNotExist(dir);
    createAtRecursive(dir, 0);
}

function createAtRecursive(dir, itr) {
    if (itr < 26) {
        dir = path.join(dir, getLetter(itr);
        createDirIfNotExist(dir);
        createAtRecursive(dir, itr + 1);
    }
}

通过这种方式,可以更轻松地跟踪您的变量,因为它们对于函数的每次调用都是不同的。