是否可以在 Js 中索引 switch 语句的案例?

Is it possible to index cases of a switch statement in Js?

假设我有以下 switch 语句: build.js

const {exec} = require('./exec'); // from child_process
const workers = require('./workers'); // functions to make folders/files
const {html} = require('../snippets/html'); //- 
const {css} = require('../snippets/css');   // |
const {js} = require('../snippets/js');     // | starter files based on extentions
const {py} = require('../snippets/py');     // |
const {java} = require('../snippets/java'); // |
const {cpp} = require('../snippets/cpp');   //-

let build = (project, folder) => {
    switch(project) {
        case 'web':
            workers.buildFile('index.html', html);
            workers.buildFile('style.css',  css);
            workers.buildFile('script.js',  js);
            if(folder !== undefined) {
                workers.buildDir(folder);
                exec(`mv index.html ${folder} && mv style.css ${folder} && mv script.js ./${folder}`);
            }
            break;
        case 'py':
            workers.buildFile('main.py', py);
            if(folder !== undefined) {
                workers.buildDir(folder);
                exec(`mv main.py ${folder}`);
            }
            break;
        case 'java':
            workers.buildFile('main.java', java);
            if(folder !== undefined) {
                workers.buildDir(folder);
                exec(`mv main.java ${folder}`);
            }
            break;
        case 'cpp':
            workers.buildFile('cpp.cpp', cpp);
            if(folder !== undefined) {
                workers.buildDir(folder);
                exec(`mv main.java ${folder}`);
            }
            break;
        default:
            break;
    }
}
// exports function later on

cli.js

const bldr = require('commander'); // commander.
const package = require('./package.json'); //package.json
const {build} = require('../src/worker/lib/utils/build'); // snippets from above
const worker = require('../src/worker/lib/utils/workers'); // makes files/folders

bldr
.action(() => {
        if(bldr.opts('f').filename !== undefined) {
            if(bldr.opts('p') === true) {
                worker.buildFile(bldr.opts('f').filename, () => {
                    if(worker.getExtention(bldr.opts('f').filename)) {
                    // ^---> problem
                    // filename = any single case in switch  --^
                    // statement
                    }
                });
            } else {
                worker.buildFile(bldr.opts('f').filename);
            }
        }
    })

是否可以对 'py'、'js' 和 'java' 等进行索引,而无需创建手动数组或单独比较它们?我实际的 switch 语句变得非常长非常快,所以如果有更快的方法来做它真的会有帮助。如果您需要更多信息,请在 link 找到所有代码所在的位置 github

如果将非网页代码导入到一个对象中:

const snippets = { py, java, cpp };

然后可以将非网络案例转换为单个部分。 switch 不是必需的,它非常冗长并且对我的帮助不够。

let build = (project, folder) => {
    if (project === 'web') {
        workers.buildFile('index.html', html);
        workers.buildFile('style.css', css);
        workers.buildFile('script.js', js);
        if (folder !== undefined) {
            workers.buildDir(folder);
            exec(`mv index.html ${folder} && mv style.css ${folder} && mv script.js ./${folder}`);
        }
    } else if (Object.keys(snippets).includes(project)) {
        const fileName = `main.${project}`;
        workers.buildFile(fileName, snippets[project]);
        if (folder !== undefined) {
            workers.buildDir(folder);
            exec(`mv ${fileName} ${folder}`);
        }
    }
};

要添加更多非网络类型,只需将它们添加到 snippets 对象即可。