Ich würde wahrscheinlich:
Verwenden Sie eine for-ofSchleife (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 dnaimmer nur c/ C, g/ G, t/ T/ oder a/ enthält A(was meines Wissens für DNA gilt ;-)), können Sie die Array.fromZuordnungsfunktion 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.fromweil 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 filterzu 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;
}