Diese Funktion verwendet eine DNA-Zeichenfolge wie 'GTCA' und gibt ein Array zurück, das korrekt übereinstimmende DNA-Paare enthält.
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;
}
Das ist richtig. Ich versuche jedoch, eine kürzere, einfachere Art zu finden, es zu schreiben. Kann mir jemand helfen, was ich verwenden soll?
javascript
arrays
for-loop
CocoFlade
quelle
quelle
|
funktioniert, kein logisches ODER in Javascript wie||
||
wäre aber besser).Antworten:
Sie können Ihren Code in folgenden Schritten verbessern:
toLowerCase()
bei der Eingabe verwenden.split
die Zeichenfolge undmap()
es, anstatt Array-push()
Werte darin zu erstellen .Wenn die Zeichenfolge andere spezifische Buchstaben enthalten könnte, müssen Sie
filter()
die folgendenundefined
Werte eingebenmap
Ein weiteres besseres wird von @RobG in den Kommentaren erwähnt, dass wir die unerwünschten Buchstaben aus der Zeichenfolge entfernen können, bevor wir sie durchlaufen.
quelle
undefined
Ihr endgültiges Array Werte.dna.toLowerCase().replace(/[^cgta]/g,'')...
. ;-)[...dna]
. Es werden keine Ersatzpaare aufgelöst. (OderArray.from
, was besonders nützlich ist , wenn Sie zur Karte gehen:Array.from(dna, mappingFunction)
.) (Nicht alles , was relevant hier gehe ich davondna
nur enthältc
,g
,t
, unda
.)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 nurc
/C
,g
/G
,t
/T
/ odera
/ enthältA
(was meines Wissens für DNA gilt ;-)), können Sie dieArray.from
Zuordnungsfunktion mit einem Suchobjekt / Map verwenden: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ätzlichArray.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
:Wenn Sie diese Annahme nicht treffen können, fügen Sie hinzu
.filter
, um diejenigen herauszufiltern, die keine Übereinstimmung hatten:Oder wenn Sie vermeiden möchten, das zusätzliche Array
filter
zu erstellen, das erstellt wird, bleiben Sie beifor-of
(oder sogar Ihremfor
):quelle
Sie können eine Lookup-Zuordnung verwenden, um die Schleife zu vereinfachen:
quelle
Vielleicht nicht verkürzt, aber definitiv wartbarer.
Sie könnten auch tun:
quelle
Sie könnten versuchen, eine
switch case
und eineforEach
Funktion wie folgt zu verwenden:quelle
Sie können die Zeichenfolge in Kleinbuchstaben schreiben, um die Prüfung der Großbuchstabenzeichenfolge zu entfernen:
quelle
quelle