Cette fonction prend une chaîne d'ADN telle que «GTCA» et renvoie un tableau contenant des paires d'ADN correctement appariées.
function pairDNA(dna) {
const pairs = []
for (let i = 0; i < dna.length; i ++) {
if (dna[i] === "C" | dna[i] === "c") {
pairs.push("CG");
} else if (dna[i] === "G"| dna[i] === "g") {
pairs.push("GC");
} else if (dna[i] === "T"| dna[i] === "t") {
pairs.push("TA");
} else if (dna[i] === "A"| dna[i] === "a") {
pairs.push("AT");
}
}
return pairs;
}
C'est correct. Cependant, j'essaie de trouver un moyen plus court et plus simple de l'écrire. Quelqu'un peut-il m'aider avec ce que je devrais utiliser?
javascript
arrays
for-loop
CocoFlade
la source
la source
|
ne fait pas logique OU en Javascript comme||
||
serait mieux, cependant).Réponses:
Vous pouvez améliorer votre code en suivant les étapes suivantes:
toLowerCase()
en entrée.split
la chaîne etmap()
plutôt que de créer despush()
valeurs de tableau en elle.Si la chaîne peut contenir autre chose que les lettres spécifiques, alors vous devez
filter()
lesundefined
valeurs aprèsmap
Une autre meilleure est mentionnée par @RobG dans les commentaires que nous pouvons supprimer les lettres indésirables de la chaîne avant de la parcourir.
la source
undefined
valeurs dans votre tableau final.dna.toLowerCase().replace(/[^cgta]/g,'')...
. ;-)[...dna]
. Il ne casse pas les paires de substitution. (OuArray.from
, ce qui est particulièrement utile si vous allez cartographier:.Array.from(dna, mappingFunction)
) (Pas tout ce qui est pertinent ici, je supposedna
que ne contient quec
,g
,t
eta
.)J'aurais probablement:
Utiliser une
for-of
boucle (ou éventuellement un mappage avec un filtrage possible)Utiliser un objet de recherche ou une carte
Faites en sorte que la chaîne soit en minuscule ou en majuscule lors de la commutation / recherche (mais les entrées dupliquées dans le commutateur / la recherche fonctionnent également):
Si tu le sais
dna
ne contiendra quec
/C
,g
/G
,t
/T
/ oua
/A
(ce qui, si je comprends bien, est vrai de l'ADN ;-)), alors vous pouvez l'utiliserArray.from
avec sa fonction de mappage avec un objet de recherche / Map:J'utilise
Array.from
parce qu'il divisera la chaîne sur les points de code , pas seulement les unités de code (ne rompt pas les paires de substitution) et possède une fonction de mappage si vous fournissez une fonction de mappage. (Fondamentalement,Array.from(str, mappingFunction)
est[...str].map(mappingFunction)
sans le tableau intermédiaire.) Probablement pas tout ce qui est pertinent ici étant donné le contenu de votre chaîne, mais cela peut avoir de l'importance si votre chaîne peut contenir des paires de substitution.Ou avec un
Map
:Si vous ne pouvez pas faire cette hypothèse, ajoutez
.filter
pour filtrer ceux qui ne correspondent pas:Ou si vous voulez éviter de créer le tableau supplémentaire que le
filter
créerait, restez avecfor-of
(ou même votrefor
):la source
Vous pouvez utiliser un mappage de recherche pour simplifier la boucle:
la source
Peut-être pas raccourci mais certainement plus maintenable.
Vous pourriez également faire:
la source
Vous pouvez essayer d'utiliser un
switch case
et unforEach
funcion, comme ceci:la source
Vous pouvez minuscule la chaîne qui vous permettra de supprimer la vérification de la chaîne majuscule:
la source
la source