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.split
la 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()
losundefined
valores 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
undefined
valores 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 quedna
solamente contienec
,g
,t
, ya
.)Yo probablemente:
Use un
for-of
bucle (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
dna
solo contendrác
/C
,g
/G
,t
/T
/ oa
/A
(que, según tengo entendido, es cierto para el ADN ;-)), puede usarloArray.from
con su función de mapeo con un objeto de búsqueda / Mapa:Estoy usando
Array.from
porque 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
.filter
para filtrar los que no coinciden:O si desea evitar crear la matriz adicional
filter
que 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 case
una 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