javascript - 如何为下面的函数编写更高效的代码?
问题描述
此功能根据员工指定显示/隐藏要选择的位置的选择标签。我编写的代码工作正常,但我觉得它可以更有效。
//according to different designation different set of locations options gets activated
function location_served_option_by_designation(filter)
{
var area_display_setting;
var city_display_setting;
var region_display_setting;
var zone_display_setting;
var country_display_setting;
var location_title;
switch(filter.value.toLowerCase()){
case 'bm':
area_display_setting = 'none';
city_display_setting = 'flex';
region_display_setting = 'flex';
zone_display_setting = 'flex';
country_display_setting = 'flex';
location_title = 'area';
break
case 'abm':
area_display_setting = 'none';
city_display_setting = 'flex';
region_display_setting = 'flex';
zone_display_setting = 'flex';
country_display_setting = 'flex';
location_title = 'area';
break
case 'rsm':
area_display_setting = 'none';
city_display_setting = 'none';
region_display_setting = 'none';
zone_display_setting = 'flex';
country_display_setting = 'flex';
location_title = 'region';
break
case 'zsm':
area_display_setting = 'none';
city_display_setting = 'none';
region_display_setting = 'none';
zone_display_setting = 'none';
country_display_setting = 'flex';
location_title = 'zone';
break
case 'nsm':
area_display_setting = 'none';
city_display_setting = 'none';
region_display_setting = 'none';
zone_display_setting = 'none';
country_display_setting = 'none';
location_title = 'country';
break
}
location_served_area.style.display = area_display_setting;
selected_served_area.options[0].selected = 'true';
location_served_city.style.display = city_display_setting;
selected_served_city.options[0].selected = 'true';
location_served_region.style.display = region_display_setting;
selected_served_region.options[0].selected = 'true';
location_served_zone.style.display = zone_display_setting;
selected_served_zone.options[0].selected = 'true';
location_served_country.style.display = country_display_setting;
selected_served_country.options[0].selected = 'true';
location_served_title.innerText = location_title[0].toUpperCase() + location_title.slice(1);
}
HTML 标记的图像 | 这里选择的名称是“BM”,因此国家:印度,区域:中央区域,地区:恰蒂斯加尔邦和城市:Durg1 被激活,并根据城市区域被激活以选择员工服务区域。如果指定为“ZSM”,则只有国家/地区选择标签将被激活,并且根据国家/地区可供选择的区域将显示为复选框。
解决方案
在这种情况下,我将使用if ... else
statements 而不是switch
,从一开始就给变量值,并且只有在它们符合我的标准时才更改它们。在我们的例子中,如果过滤器值等于“nsm”,则值保持不变,因此我们可以检查其他情况。在 javaScript 中,建议使用驼峰式命名变量名并保持名称相当简短和相关。这就是我将如何干燥代码:
function byDesignation(filter) {
let filterValue = filter.value.toLowerCase();
let area = "none";
let city = "none";
let region = "none";
let zone = "none";
let country = "none";
let locationTitle = "country";
if (filterValue === "zsm") {
country = "flex";
locationTitle = "zone";
} else if (filterValue === "rsm") {
locationTitle = "region";
zone = "flex";
country = "flex";
} else if (filterValue === "abm" || filterValue === "bm") {
locationTitle = "area";
city = "flex";
region = "flex";
zone = "flex";
country = "flex";
}
// the rest of the function
// ...
}
推荐阅读
- c - 为什么 4 线程程序在 1 核 VM 上比在具有 4 核的同一 VM 上运行得更快?
- java - Elasticsearch嵌套排序 - 文档和用于排序的嵌套对象之间不匹配
- javascript - 使用原型时从类中获取方法
- c# - 阶乘计算器呈现一个负数,应该是正数。怎么修?
- sql - 使用 REPLACE 将回车添加到字符串不起作用
- vue.js - 如何从 Vue 组件返回多行?
- python - 在 Python Apache Beam 中计算 Google Cloud Storage 中的对象
- mysql - SELECT - 过滤掉符合条件的结果
- jquery - 正则表达式 - CSV 电子邮件地址可以,但如何防止以逗号结尾?
- assembly - x86 指令“movb $5, var(,1)”