我可以用javascript中的switch或case语句重构if-else吗
Can I refactor if - else with a switch or case statement in javascript?
我有以下代码:
var btns1 = {
'Submit': function (win) {
submitHandler(oLink.$link, $('#main-form'), false);
},
'Submit & Close': function (win) {
submitHandler(oLink.$link, $('#main-form'), true);
},
'Close': function (win) {
modal.closeModal()
}
}
var btns2 = {
'Submit & Close': function (win) {
submitHandler(oLink.$link, $('#main-form'), true);
},
'Close': function (win) {
modal.closeModal()
}
}
if (oLink.title.substr(0, 4) == "Crea") {
if (content.match(/data-RowKey="(.{3}).*/)) {
oLink.title += " " + content.match(/data-RowKey="(.{3}).*/)[1]
}
var btns = btns1;
}
if (oLink.title.substr(0, 4) == "Edit") {
var btns = btns1;
}
if (oLink.title.substr(0, 4) == "Dele") {
var btns = btns2;
}
有没有一种方法可以重构代码。我当时想的是把它放入一个名为"adminModalBtns"的函数中,让它把oLink和content作为一个参数,并返回btns。用if else或案例陈述来做这件事最清楚吗?
function getButtons(oLink, content) {
var btns1 = {
'Submit': function(win) {
submitHandler(oLink.$link, $('#main-form'), false);
}
}
var btns2 = {
'Submit & Close': function(win) {
submitHandler(oLink.$link, $('#main-form'), true);
},
'Close': function(win) {
modal.closeModal()
}
}
switch (oLink.title.substr(0, 4)) {
case "Crea":
if (content.match(/data-RowKey="(.{3}).*/)) {
oLink.title += " " + content.match(/data-RowKey="(.{3}).*/)[1]
}
case "Edit":
return $.extend(btns1, btns2);
case "Dele":
return btns2;
}
}
var btns = getButtons(oLink, content);
或者,您可以使用三元运算符
var sub = oLink.title.substr(0, 4)
,bttns = sub === "Crea" ? btns1
: sub === "Edit" ? btns1
: btns2;
oLink.title += /data-RowKey="(.{3}).*/.test(content)
? ' ' + content.match(/data-RowKey="(.{3}).*/)[1]
: '';
您还可以使用哈希映射conditionMap
重构代码,并创建一个变量re
来存储正则表达式/data-RowKey="(.{3}).*/
:
var getButtons = function (oLink, content) {
var re = new RegExp(/data-RowKey="(.{3}).*/),
btns1 = {
'Submit': function (win) {
submitHandler(oLink.$link, $('#main-form'), false);
}
},
btns2 = {
'Submit & Close': function (win) {
submitHandler(oLink.$link, $('#main-form'), true);
},
'Close': function (win) {
modal.closeModal();
}
},
conditionMap = {
'Crea': (content.match(re)) && (oLink.title += ' ' + content.match(re)[1]),
'Edit': $.extend(btns1, btns2),
'Dele': btns2
};
return conditionMap[oLink.title.substr(0, 4)];
},
btns = getButtons(oLink, content);
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- 如何在ReactJS JSX中执行嵌套的if-else语句
- JSON重构(合并内容)与javascript
- 自动修复”;语句前缺少分号“;
- 使用递归、Ramda.js和无点样式重构字符串的getPermutations()
- 如何在 API 调用后和 if 语句中启用提交按钮
- 是“;x==a||b”;以及“;x==a||x==b”;JavaScript中的等效语句
- 带有多个elseif的Javascript if语句
- 这个条件语句的逻辑有问题
- 如何“;过滤器”;或者以其他方式重构该数据
- Sharepoint JScript if语句未执行
- 为什么继续;语句冻结浏览器
- 我可以用javascript中的switch或case语句重构if-else吗
- 如果可以进行语句重构,则是简写
- 如何重构我的条件语句
- 在JavaScript中重构嵌套if语句
- 我该如何重构这堆if语句
- Javascript if 语句由于数据错误而需要重构
- 重构if/else语句,时间跨度在两年之间
- 编程标准&重构try/catch语句