简体   繁体   English

缩短 if else 语句

[英]Shorten if else statement

How can I shorten that if else statement?如何缩短 if else 语句?

const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => {
    if(requiredItems && requiredItems.length > 0){
        return userHaveMultipleRequiredItems(requiredItems);
    }
    if(oneOfItems && oneOfItems.length > 0){
        return userHaveRequiredItem(oneOfItems);
    }
    return true

I tried this but it always return true我试过这个,但它总是返回 true

const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => {
    requiredItems && requiredItems.length > 0 && userHaveMultipleRequiredItems(requiredItems);
    oneOfItems && oneOfItems.length > 0 && userHaveRequiredItem(oneOfItems);
    return true
};

Use the optional chaining operator ?.使用可选的链接运算符?. to return the falsy undefined if the arrays are not defined.如果undefined数组,则返回虚假的undefined length === 0 is also falsy. length === 0也是假的。

const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => {
    if(requiredItems?.length) return userHaveMultipleRequiredItems(requiredItems);
    if(oneOfItems?.length) return userHaveRequiredItem(oneOfItems);
    return true

You were on the right track with your second attempt, but it is missing the return statements in the shortened ifs.您的第二次尝试是在正确的轨道上,但它缺少缩短的 ifs 中的 return 语句。

You could also just use a simple lambda to refactor those two longer checks with something like:您也可以使用一个简单的 lambda 来重构这两个较长的检查,例如:

let hasElements = (arr) => arr && arr.length > 0;

const isPathPointAvailable = (requiredItems?: ModelTypes['Item'][], oneOfItems?: ModelTypes['Item'][]) => {
  if( hasElements(requiredItems) ) return userHaveMultipleRequiredItems(requiredItems);
  
  if( hasElements(oneOfItems) ) return userHaveRequiredItem(oneOfItems);
  
  return true
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM