如果语句较短的逻辑

时间:2019-06-16 11:56:13

标签: javascript conditional-statements

我正在编写一些代码来确定是否需要使用模拟数据。这是代码:

let useMocks = false

const setMockSwitch = ({idNumber}) => {
    if (idNumber && idNumber === mockUser.idNumber) {
        useMocks = true
    }

    if (idNumber && idNumber !== mockUser.idNumber) {
        useMocks = false
    }
}

如果idNumber传递给该函数,并且它等于一个模拟用户,而不是“切换”开关...

我正在尝试考虑逻辑解决方案,如何缩短代码并使之更具可读性。多谢您的协助!谢谢!

3 个答案:

答案 0 :(得分:4)

好吧,您可以利用比较产生布尔值的事实:

const setMockSwitch = ({idNumber}) => {
  if (idNumber)
    useMocks = idNumber === mockUser.idNumber;
};

哦,请注意,如果mockUser.idNumber可以一直是0,那么这将有问题(与原始代码一样),因为0在这样的代码中以false的身份进行测试

答案 1 :(得分:0)

假设mockUser.idNumber具有您想要的实际值,您就可以做到,

const setMockSwitch = ({idNumber}) => {
     useMocks = idNumber === mockUser.idNumber;
}

答案 2 :(得分:0)

您可以将其简化为单线箭头功能。通过利用短路&&运算符,可以确保仅在定义useMocks的情况下设置idNumber

let useMocks = false

const setMockSwitch = ({idNumber}) => idNumber && (useMocks = idNumber === mockUser.idNumber)

您也可以将其编写为无副作用,

const shouldUseMocks = ({idNumber}) => idNumber === mockUser.idNumber

idNumber && useMocks = shouldUseMocks({idNumber})

这使您可以将此方法提取到帮助程序库中并重新使用,因为它不会直接从外部范围修改变量。这是我的首选和推荐方式。

如果您想将0视为有效的idNumber

let useMocks = false

const setMockSwitch = ({idNumber}) => idNumber !== void 0 && (useMocks = idNumber === mockUser.idNumber)

void 0始终返回true primitive undefined,而不返回任何称为undefined的局部变量,因此这是检查未定义的最干净的方法。实际上,您可以将void operator放在任何其他表达式的前面,以强制其返回undefined