javascript - 是否可以在 Js 中对 switch 语句的情况进行索引?
问题描述
假设我有以下 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 语句很快就变得很长,所以如果有更快的方法来做这件事,它会很有帮助。如果您需要更多信息,这里是所有代码在github上的链接。
解决方案
如果将非 websnippet 导入放入对象中:
const snippets = { py, java, cpp };
然后可以将非 Web 案例转换为单个部分。switch
不需要,它非常冗长,对 IMO 的帮助不够。
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}`);
}
}
};
要添加更多非 Web 类型,只需将它们添加到snippets
对象中即可。
推荐阅读
- c - 写入到 mmapped 内存中的某个位置后,之后打印出来时,不再写入
- mysql - mysql查询错误
- python - 如何在python for循环中创建和删除类实例
- rexx - 使用 REXX 访问 vm370 磁盘
- python - Python web 抓取 IndexError 使用来自站点“https://www.boi.org.il/currency.xml?curr=01”的请求和 lxml
- sql-server - 如何创建存储过程来更新 Employee 表?
- python - 尽管遵循以下教程,Python-NEAT 代码仍给出未知错误
- javascript - 如果我在该类的另一个对象中的一个对象中,如何获得对我所在的类的实例的引用?
- sql - 如何使用 SQL SELECT 根据另一个表中的特定行查询表
- ios - 无法使用 Swift 对 UITextField 上的对象进行正则表达式匹配