优化嵌套开关盒

时间:2016-04-14 13:04:56

标签: javascript jquery switch-statement

由于嵌套切换案例的可读性不高,我如何优化嵌套切换案例?

switch (code) {
  case 200:
    switch (status) {
      case 'EXISTS':
        $alreadyExistsMessage.show();
        break;
      case 'UPDATED':
        $alreadyExistsMessage.show();
        break;
      case 'ERROR':
        $wrongFormatMessage.show();
        break;
    }
    break;
  case 201:
    redirectOnSuccess(data);
    break;
  default:
    $wrongFormatMessage.show();
    break;
}

2 个答案:

答案 0 :(得分:2)

我唯一要做的就是将案例APP_REMOVED_FROM_RECENTS.'UPDATED'合并为同一块:

'EXISTS'

答案 1 :(得分:0)

另一种方法是创建代码和状态的“地图”。

在此示例中,您有一个callbacks变量,其作用类似于地图。然后,您可以code访问这些属性。如果该属性是函数,则运行它,否则使用status检索包含该函数的属性。

/* mocks */
var code = 200;
var status = 'UPDATED';

var $alreadyExistsMessage =
  $wrongFormatMessage = {
    show: () => {
      console.log(code, status, callback[code][status]);
    }
  };

/* code */

var callback = {
  '200': {
    'EXISTS': $alreadyExistsMessage.show,
    'UPDATED': $alreadyExistsMessage.show,
    'ERROR': $wrongFormatMessage.show
  },
  'default': $wrongFormatMessage.show
};

var fn = callback[`${code}`];


if (typeof fn === 'function') {
  fn();
}
else if (!fn) {
  fn = callbacks['default'];
  fn();
}
else {
  fn = fn[status];
  fn();
}