Esta función toma una cadena de ADN como 'GTCA' y devuelve una matriz que contiene pares de ADN coincidentes correctamente.
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;
}
Esto es correcto. Sin embargo, estoy tratando de encontrar una forma más corta y simple de escribirlo. ¿Alguien puede ayudarme con lo que debería estar usando?
javascript
arrays
for-loop
CocoFlade
fuente
fuente

|no hace lógica O en Javascript como||||aunque sería mejor).Respuestas:
Puede mejorar su código en los siguientes pasos:
toLowerCase()en la entrada.splitla cadena ymap()en lugar de crear una matriz depush()valores en ella.Si la cadena puede contener algo más que las letras específicas, entonces necesita
filter()losundefinedvalores después demap@RobG menciona otra mejor en los comentarios de que podemos eliminar las letras no deseadas de la cadena antes de recorrerla.
fuente
undefinedvalores en su matriz final.dna.toLowerCase().replace(/[^cgta]/g,'').... ;-)[...dna]. No rompe pares sustitutos. (OArray.from, lo que es particularmente útil si se va a asignar:Array.from(dna, mappingFunction).) (No todo lo que aquí interesa, que supongo quednasolamente contienec,g,t, ya.)Yo probablemente:
Use un
for-ofbucle (o posiblemente un mapeo con posible filtrado)Use un objeto de búsqueda o un mapa
Haga que la cadena sea minúscula o mayúscula al cambiar / mirar hacia arriba (pero las entradas duplicadas en el cambio / búsqueda también funcionan):
Si sabe que
dnasolo contendrác/C,g/G,t/T/ oa/A(que, según tengo entendido, es cierto para el ADN ;-)), puede usarloArray.fromcon su función de mapeo con un objeto de búsqueda / Mapa:Estoy usando
Array.fromporque dividirá la cadena en los puntos de código , no solo las unidades de código (no divide los pares sustitutos) y tiene una función de mapeo si proporciona una función de mapeo. (Básicamente,Array.from(str, mappingFunction)es[...str].map(mappingFunction)pero sin la matriz intermedia.) Probablemente no sea tan relevante aquí dado el contenido de su cadena, pero puede importar si su cadena puede contener pares sustitutos.O con un
Map:Si no puede hacer esa suposición, agregue
.filterpara filtrar los que no coinciden:O si desea evitar crear la matriz adicional
filterque crearía, quédese confor-of(o incluso sufor):fuente
Puede usar una asignación de búsqueda para simplificar el ciclo:
fuente
Quizás no acortado pero definitivamente más fácil de mantener.
También puedes hacer:
fuente
Podría intentar usar ay
switch caseuna funciónforEach, como esta:fuente
Puede poner en minúscula la cadena que le permitirá eliminar la comprobación de la cadena de mayúsculas:
fuente
fuente