0
votes

Refacteur une simple déclaration de retour dans JS d'une fonction de tri

sortComponents (a, b) {
  if (!a) {
    return 1
  }
  if (!b) {
    return -1
  }
  return this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text ? -1 : 1
},
Is there any way to summaries/simplify first two return statements to one? I don't wan't to use ternary operators to change it to single statement and make code complex. 

2 commentaires

Vous pouvez les combiner tous comme un terne imbriqué, mais je le laisserais comme c'est parce que c'est difficile à lire, quelque chose comme: retour! A? 1:!


SORTECOMPONENTS (A, B) =>! A? 1:! B? -1: Ce.KeyedComponentTypes [a] .text> this.KeyedComponEtTypes [b] .text? -1: 1 Travailler pour vous?


4 Réponses :


1
votes

Vous pouvez utiliser une instruction || code> à renvoyer -1 lorsque votre condition et ! B code> est VRAI.`

Nous savons aussi que si a code> était indéfini (! A code>) il retournerait 1 code> afin que nous puissions retourner que a code> est défini, sinon, nous Retour 1. p>

p>

let keyedComponentTypes = [
  {
    text: 'b'
  },
  {
    text: 'a'
  },
  {
    text: 'e'
  },
  {
    text: 'd'
  },
  {
    text: 'c'
  },
]


function originalSortComponents (a, b) {
  if (!a) {
    return 1
  }
  if (!b) {
    return -1
  }
  return keyedComponentTypes[a].text > keyedComponentTypes[b].text ? -1 : 1
}

function improvedSortComponent(a,b) {
  return a && ((keyedComponentTypes[a].text > keyedComponentTypes[b].text) || !b) ? -1 : 1
}

let array = [0,undefined,1,2,3,undefined,4]
console.log(array.sort(originalSortComponents));

console.log(array.sort(improvedSortComponent));


3 commentaires

L'ajout d'un opérateur plus ternier ou logique rendrait le code difficile à lire du code.


@MTauqeer je suis d'accord mais vous avez demandé un réfractaire de cela. Si votre code travaillait auparavant, je ne vois pas pourquoi il serait pertinent de le réfracter. En fin de compte, il n'y a pas de bonne réponse à votre question.


Il est possible pour ce type de tenter KeyedComponentTypes [b] .text lorsque B est null qui conduit à une erreur.



0
votes

Oui, voici comment je le ferais

sortComponents (a, b) 
{
  const c = this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text;
  return (!a || !c) ? 1 : -1;
}


4 commentaires

'A' et 'B' peuvent être indéfinis, alors ne peut donc pas l'utiliser directement avec le tableau KeyedComponentTypesPès


S'il n'y a pas a , alors this.keyedComponentTypes [A] .text est une erreur.


Oh bien vérifier la réponse de Nicolas, il l'a compris :-)


@ Fuménoire Merci, cependant, je ne suis même pas sûr que c'est ce que l'OP recherche.



0
votes

Vous pouvez faire quelque chose comme ce qui suit si vous souhaitez conserver juste moins de déclarations de retour que possible (bien que je ne vois pas une grosse affaire d'avoir des déclarations de retour à court-circuit au début si vous perdrez la lisibilité)

const first = !!this.keyedComponentTypes[a] ? this.keyedComponentTypes[a].text : '';

const second = !!this.keyedComponentTypes[b] ? this.keyedComponentTypes[b].text : '';

return (second || '').localeCompare(first || '');


0 commentaires

0
votes

C'est ce que j'ai fini par

sortComponents (a, b) {
  if (!a || !b) {
    return !a ? -1 : 1
  }
  return this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text ? 1 : -1
}


0 commentaires