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
};
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.
You could also just use a simple lambda to refactor those two longer checks with something like:
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
}