为了账号安全,请及时绑定邮箱和手机立即绑定

If-else 重构

If-else 重构

翻阅古今 2021-11-04 16:42:13
我正在尝试重构这个 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('');    }  };`
查看完整描述

3 回答

?
MMMHUHU

TA贡献1834条经验 获得超8个赞

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


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('');

    }

};

虽然,并没有小得多,也更难阅读


查看完整回答
反对 回复 2021-11-04
?
慕尼黑的夜晚无繁华

TA贡献1864条经验 获得超6个赞

您的一种选择是在您的函数中使用三元运算符来定义您正在查看传递的值:


    var returnValue;


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


    callback(returnValue);


查看完整回答
反对 回复 2021-11-04
?
精慕HU

TA贡献1845条经验 获得超8个赞

您仍然可以使用 if elses 条件,但您必须结合一些代码,例如

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

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

使您的代码更短。


查看完整回答
反对 回复 2021-11-04
  • 3 回答
  • 0 关注
  • 137 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信