是否可以在 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
对象即可。
假设我有以下 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
对象即可。