If-else 重构

我正在尝试重构这个 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('');

    }

  };`


翻阅古今
浏览 138回答 3
3回答

MMMHUHU

这是一种可能与您的代码一样有效的解决方案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('');    }};虽然,并没有小得多,也更难阅读

慕尼黑的夜晚无繁华

您的一种选择是在您的函数中使用三元运算符来定义您正在查看传递的值:    var returnValue;    returnValue = (value && value.match(phoneNumberRegex) && value.includes('-')  && value.indexOf('-') === 2) ? 'Please enter 7 digits after "-".' : returnValue ;    callback(returnValue);

精慕HU

您仍然可以使用 if elses 条件,但您必须结合一些代码,例如 value.indexOf('-') and value.includes('-') value && value.match(phoneNumberRegex)和value.indexOf('-') === 3 and value.length !== 14使您的代码更短。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript