javascript - 如何简化长的 javascript switch case 语句?

标签 javascript jquery

我有下面的代码。它看起来又长又复杂,现在我必须添加更多条件。有什么办法可以简化这段代码。我所能想到的就是组合城市和菜单开关,但是如果我这样做,我必须以一种方式获取城市的 pk 值,另一种方式获取菜单的 pk 值。 javascript 是否提供任何其他方式来做与开关相同的事情?很抱歉列出了很长的代码,但我认为我应该包括所有内容。

function getParams(entity) {

 var store = window.localStorage;
 var table = "Content";

 switch (entity) {
    case "City":
        if (store.getItem('AccountID')) {
            pk = store.getItem('AccountID') + "04" + "000";
            return {
                pk: pk,
                param: '?pk=' + pk,
                table: table,
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Account");
            return { rc: false }
        }
        break;
    case "Menu":
        if (store.getItem('AccountID')) {
            pk = store.getItem('AccountID') + "00" + "000";
            return { 
                pk: pk,
                param: '?pk=' + pk,
                table: table,
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Account");
            return { rc: false }
        }
        break;
    case "Page":
        if (store.getItem('AccountID') && store.getItem('PageID')) {
            pk = store.getItem('AccountID') + store.getItem('PageID') + "000";
            return {
                pk: pk,
                param: '?pk=' + pk,
                table: table,
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Account and Page Type");
            return { rc: false }
        }
        break;
    case "Question":
        if (store.getItem('AccountID') &&
            store.getItem('CityID') && 
            store.getItem('TopicID') ) {
            pk = store.getItem('AccountID') + store.getItem('CityID');
            return {
                pk: pk,
                param: '?pk=' + pk + '&rk=' + store.getItem('TopicID'),
                table: "Question",
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Account, City and Topic");
            return { rc: false }
        }
        break;
    case "Reference":
        if (store.getItem('ReferenceID')) {
            pk = store.getItem('ReferenceID');
            return { 
                pk: pk,
                param: '?pk=' + pk,
                table: "Reference",
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Reference");
            return { rc: false }
        }
        break;
    case "Topic":
        if (store.getItem('AccountID') && store.getItem('CityID')) {
            pk = store.getItem('AccountID') + "05" + store.getItem('CityID');
            return { 
                pk: pk,
                param: parameters = '?pk=' + pk,
                table: table,
                rc: true
            }
        } else {
            paramOnFailure("Please reselect Account and City");
            return { rc: false }
        }
        break;
    default:
        ;
}

最佳答案

将这部分代码放入函数中并使用适当的参数调用它

  if (store.getItem('AccountID')) {
             pk = store.getItem('AccountID') + "00" + "000";
             return {
                  pk: pk,
                 param: '?pk=' + pk,
                 table: table,
                 rc: true
             }
         } else {
             paramOnFailure("Please reselect Account");
             return { rc: false }
         } 

所以你的代码将是这样的,并从每个 Switch Case 调用这个函数

function CommonforCase(store,value)
{
   if (store.getItem('AccountID')) {
                 pk = store.getItem('AccountID') + value;
                 return {
                      pk: pk,
                     param: '?pk=' + pk,
                     table: table,
                     rc: true
                 }
             } else {
                 paramOnFailure("Please reselect Account");
                 return { rc: false }
             } 

}

关于javascript - 如何简化长的 javascript switch case 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11331160/

相关文章:

javascript - 如何通过ajax使用多选过滤器

javascript - angularjs 指令仅允许字母字符和数字

javascript - anchor 标记上的 onclick 事件在 IE 中有效,但在 Firefox 和 Chrome 中无效

javascript - 如何检测用户是否点击了 "back"按钮

php - this.checked 造成误报?

jquery - 按键速度比值快?

javascript - 重新定位 jQuery "this"

javascript - 爬虫抓取 chrome 扩展 id

javascript - 用匹配项替换回调函数

javascript - 使 cookie 过期