Home > OS >  Shorten if else statement
Shorten if else statement

Time:11-08

How can I shorten that if else statement?

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

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

CodePudding user response:

Use the optional chaining operator ?. to return the falsy undefined if the arrays are not defined. length === 0 is also falsy.

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.

CodePudding user response:

You could also just use a simple lambda to refactor those two longer checks with something like:

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

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

That would keep the same semantics, but having a function called isNotEmpty(...) vs. !isEmpty(...) is maybe not as "stylish." So if you prefer the later it would mean you'd need to invert the boolean logic:

 let isEmpty = (arr) => !arr || arr.length === 0;
  • Related