Ich würde wahrscheinlich:
Verwenden Sie eine for-of
Schleife (oder möglicherweise eine Zuordnung mit möglicher Filterung).
Verwenden Sie ein Suchobjekt oder eine Karte
Machen Sie die Zeichenfolge beim Wechseln / Nachschlagen in Klein- oder Großbuchstaben (aber doppelte Einträge in der Umschaltung / Suche funktionieren auch):
Wenn Sie wissen, dass dies dna
immer nur c
/ C
, g
/ G
, t
/ T
/ oder a
/ enthält A
(was meines Wissens für DNA gilt ;-)), können Sie die Array.from
Zuordnungsfunktion mit einem Suchobjekt / Map verwenden:
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
Ich verwende es, Array.from
weil es die Zeichenfolge auf Codepunkte aufteilt , nicht nur auf Codeeinheiten (löst keine Ersatzpaare auf) und eine Zuordnungsfunktion hat, wenn Sie eine Zuordnungsfunktion bereitstellen. (Grundsätzlich Array.from(str, mappingFunction)
ist es [...str].map(mappingFunction)
aber ohne das Zwischenarray.) Wahrscheinlich nicht alles, was hier angesichts des Inhalts Ihrer Zeichenfolge relevant ist, aber es kann wichtig sein, ob Ihre Zeichenfolge Ersatzpaare enthält.
Oder mit einem 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()));
}
Wenn Sie diese Annahme nicht treffen können, fügen Sie hinzu .filter
, um diejenigen herauszufiltern, die keine Übereinstimmung hatten:
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);
}
Oder wenn Sie vermeiden möchten, das zusätzliche Array filter
zu erstellen, das erstellt wird, bleiben Sie bei for-of
(oder sogar Ihrem 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;
}