If-else Refactor

问题描述 投票:-3回答:3

我正在尝试重构if else语句的这一块。什么是该代码的最佳优化版本?

`const handlePhoneNumberFormat = (rules, value, callback) => {
    if (value && value.match(phoneNumberRegex)) {
      if (value.includes('-')) {
        if (value.indexOf('-') === 2) {
          if (value.length !== 10) {
            callback('Please enter 7 digits after "-".');
          } else {
            callback();
          }
        } else if (value.indexOf('-') === 3) {
          if (value.length !== 14) {
            callback('Please enter 10 digits after "-".');
          } else {
            callback();
          }
        } else {
          callback();
        }
      } else {
        callback();
      }
    } else {
      callback('');
    }
  };`
javascript reactjs function if-statement
3个回答
0
投票

如果有其他条件,您仍然可以使用,但您必须组合一些代码,例如

 value.indexOf('-') and value.includes('-') value && value.match(phoneNumberRegex)

value.indexOf('-') === 3 and value.length !== 14

使代码更短。


0
投票

您所拥有的一个选择是在函数中利用三元运算符来定义要传递的值:

    var returnValue;

    returnValue = (value && value.match(phoneNumberRegex) && value.includes('-')  && value.indexOf('-') === 2) ? 'Please enter 7 digits after "-".' : returnValue ;

    callback(returnValue);

0
投票

这是一种可能与您的代码一样有效的解决方案

const handlePhoneNumberFormat = (rules, value, callback) => {
    if (value && value.match(phoneNumberRegex)) {
        const pos = value.indexOf('-');
        const length = value.length;
        if (pos === 2 && length !== 10) {
            callback('Please enter 7 digits after "-".');
        } else if (pos === 3 && length !== 14) {
            callback('Please enter 10 digits after "-".');
        } else {
            callback():
        }
    } else {
      callback('');
    }
};

无重复,每个回调都是唯一的……尽管如果您需要较小的代码,则可以使用

const handlePhoneNumberFormat = (rules, value, callback) => {
    const t = { "2": 10, "3": 14 };
    if (value && value.match(phoneNumberRegex)) {
        const pos = value.indexOf('-');
        const a = t[pos] || 0;
        if (a && a !== value.length) {
            callback(`Please enter ${a - pos - 1} digits after "-".')`);
        } else {
            callback():
        }
    } else {
      callback('');
    }
};

虽然不小,但也难以阅读

© www.soinside.com 2019 - 2024. All rights reserved.