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.
4 Réponses :
Vous pouvez utiliser une instruction Nous savons aussi que si p> || code> à renvoyer -1 lorsque votre condition et
! B code> est VRAI.`
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>
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));
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 code> lorsque
B code> est
null code> qui conduit à une erreur.
Oui, voici comment je le ferais
sortComponents (a, b) { const c = this.keyedComponentTypes[a].text > this.keyedComponentTypes[b].text; return (!a || !c) ? 1 : -1; }
'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 code>, alors
this.keyedComponentTypes [A] .text code> 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.
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 || '');
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 }
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 code> Travailler pour vous?