是否可以对多个数组使用开关大小写.indexOf
Is it possible to use switch case for more than one array.indexOf
对于使用javascript 的特定数组,我有一些if条件集
if (activity.indexOf("strategy session") != -1) {
$("#FoPStrategySession").show();
}
if (activity.indexOf("sessions") != -1) {
$("#acprojectname").show();
if (supportmodel == "Level") {
$(".accombohide").hide();
$("[title='Test']").val("NA");
$("[title='Test2']").val("NA");
}
}
if (activity.indexOf("virtual") != -1) {
if (supportmodel == "Level") {
$(".lvl3_consult").hide();
$("[title='Test']").val("NA");
$("[title='Test2']").val("NA");
}
}
if (activity.indexOf("Other") != -1) {
$("#acactivityother").show();
}
有没有其他方法可以使用switch case或任何其他方法有效地编写此代码?
不需要多个if()
或switch()
语句
您可以降低圈复杂度(现在是7(,最终得到更好的代码。注意,已经重构了一些jQuery选择器$('[title="Test"], [title="Test2"]').val('NA');
,并分别使用比较运算符===
和!==
而不是==
和!=
。
"一段源代码的圈复杂度是指通过源代码的线性独立路径的数量。"——http://en.wikipedia.org/wiki/Cyclomatic_complexity
还创建了变量,以避免jQuery多次在DOM中搜索相同的选择器。
代码:
var $foPStrategySession = $('#FoPStrategySession'),
$acprojectname = $('#acprojectname'),
$titleTests = $('[title="Test"], [title="Test2"]'),
$acactivityother = $('#acactivityother'),
$accombohide = $('.accombohide'),
$lvl3_consult = $('.lvl3_consult'),
obj = {
'strategy session': function () {
$foPStrategySession.show();
},
'sessions': function () {
$acprojectname.show();
if (supportmodel === 'Level') {
$accombohide.hide();
$titleTests.val('NA');
}
},
'virtual': function () {
if (supportmodel === 'Level') {
$lvl3_consult.hide();
$titleTests.val('NA');
}
},
'Other': function () {
$acactivityother.show();
}
};
Object.keys(obj).forEach(function (o) {
if (activity.indexOf(o) !== -1) {
obj[o]();
}
});
首先,您不应该再次查询DOM:
var strategySession = $("#FoPStrategySession");
var acprojectname = $('#acprojectname');
// and so on..
稍后,您将使用上面创建的引用来访问这些DOM元素。
现在,您可以使用Array.prototype.forEach
通过switch
:简化代码
activity.forEach(function(act) {
// I suggest you that you lower case each activity
// to avoid further issues...
switch(act.toLowerCase())
case "strategy session":
strategySession.show();
break;
// other cases...
default:
throw Error("Not supported activity");
}
});
旁注:我知道activity
是数组。否则,您将使用相等运算符检查activity
是否是某个特定的string
,我的答案应该需要一些重构。如果我错认为activity
是array
,请评论我的答案。
相关文章:
- 如何使用jquery强制一个单词更改大小写等以保留品牌
- 为什么JavaScript中允许开关块中的重复大小写标签
- Jquery Selection选项不适用于开关和大小写
- 在使用 JavaScript 开关大小写时遇到问题
- JavaScript 开关大小写 2 个布尔值
- 更好的性能?200+ 个单独的结果页面或 200+ 个条件(如果还有其他梯形图或开关大小写?)在 Javascript/
- 编写一个检查 $(this) 的开关 #id 大小写
- 如何使用 javascript 在开关大小写中调用大小写
- ReactJS 开关大小写错误 相邻的 JSX 元素必须包装在封闭标记中
- 此功能如何使用开关大小写
- 在 Javascript 中添加开关大小写
- 用于比较值的开关大小写
- 关于开关大小写的快速 JavaScript 帮助
- 内部 HTML 开关大小写计数器
- 语法错误:If else三元运算符中的ES6开关大小写
- 将开关大小写(在c++中)替换为javascript中的文字对象
- 在 Javascript 中从开关大小写内部中断循环
- 是否可以对多个数组使用开关大小写.indexOf
- 为什么 const 在开关大小写语句中是非法的
- 开关大小写语句中的分号