0
votes

Refacteur code JavaScript plus élégamment, pas utiliser l'expression ternaire imbriquée ou laisser

J'ai ce code simplifié, assez simple: xxx

mais je l'ai trouvé assez lisible. Quelqu'un a une idée de savoir comment refactoriser ce code n'utilisant pas si ou ou ou laisse ou opérateur ternaire imbriqué ou imbriqué?


2 commentaires

Fournir l'instance la plus minimale / simple de votre problème améliore la chance d'obtenir de bonnes réponses.


Déjà édité.


3 Réponses :



0
votes

parfois juste le séparer en une fonction aide à la lisibilité.

const toUrl = ({ pipelineType = '', ticketId = '', productId = '' }) => {
  if (pipelineType) {
    return `/pipeline/${pipelineType}`;
  } 
  
  if (ticketId) {
    return `/ticket/${ticketId}`;
  } 
  
  if (productId) {
    return `/product/${productId}`;
  }
  
  return '/pipeline/local';
}


export const OwnRedirect = () => {
  const params = useParams<{
    pipelineType?: string;
    ticketId?: string;
    productId?: string;
  }>();
  
  return <Redirect to={toUrl(params)}/>;
};


0 commentaires

0
votes

Vous pouvez utiliser un Tagged Sum . Par exemple:

p>

// Generic functions
// B is the function compose combinator
const B = g => f => x => g (f (x))

const taggedSum = xs => Object.fromEntries (
  xs.map(tag => [tag, value => ({ tag, value })])
)

const cata = matches => ({ tag, value }) => matches[tag] (value)
/////////////////////////

const Kind = taggedSum (['pipeline', 'ticket', 'product', 'local' ])

const path = cata ({
    pipeline: x => `/pipeline/${x}`,
    ticket: x => `/ticket/${x}`,
    product: x => `/product/${x}`,
    local: () => `/pipeline/local`
})

const output1 = B (path) (Kind.pipeline) (1)
const output2 = B (path) (Kind.ticket) (14)
const output3 = B (path) (Kind.product) (3421)
const output4 = B (path) (Kind.local) (0)


console.log ('pipeline:', output1)
console.log ('ticket:', output2)
console.log ('product:', output3)
console.log ('local:', output4)


0 commentaires