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 que c
/ C
, g
/ G
, t
/ T
/ ou a
/ A
(ce qui, si je comprends bien, est vrai de l'ADN ;-)), alors vous pouvez l'utiliser Array.from
avec sa fonction de mappage avec un objet de recherche / Map:
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
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
:
const table = new Map([
[c, "CG"],
[g, "GC"],
[t, "TA"],
[a, "AT"]
]);
function pairDNA(dna) {
return Array.from(dna, entry => table.get(entry.toLowerCase()));
}
Si vous ne pouvez pas faire cette hypothèse, ajoutez .filter
pour filtrer ceux qui ne correspondent pas:
function pairDNA(dna) {
return Array.from(dna, entry => table.get(entry.toLowerCase())).filter(Boolean);
// or if using an object: return dna.map(entry => table[entry.toLowerCase()]).filter(Boolean);
}
Ou si vous voulez éviter de créer le tableau supplémentaire que le filter
créerait, restez avecfor-of
(ou même votre for
):
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
const pairs = [];
for (const entry of dna) {
const value = table[entry.toLowerCase()];
if (value) {
pairs.push(value);
}
}
return pairs;
}