Essa função pega uma sequência de DNA como 'GTCA' e retorna uma matriz contendo pares de DNA correspondidos corretamente.
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;
}
Isto está correto. No entanto, estou tentando encontrar uma maneira mais curta e simples de escrevê-lo. Alguém pode me ajudar com o que devo usar?
javascript
arrays
for-loop
CocoFlade
fonte
fonte
|
não faça OR lógico em Javascript como||
||
seria melhor, no entanto).Respostas:
Você pode melhorar seu código nas seguintes etapas:
toLowerCase()
na entrada.split
a string emap()
ela, em vez de criarpush()
valores de matriz nela.Se a string puder conter qualquer outra letra específica, você precisará
filter()
dosundefined
valores apósmap
Outra melhoria é mencionada pelo @RobG nos comentários: podemos remover as letras indesejadas da string antes de passar por ela.
fonte
undefined
valores em sua matriz final.dna.toLowerCase().replace(/[^cgta]/g,'')...
. ;-)[...dna]
. Não quebra pares substitutos. (OuArray.from
, o que é particularmente útil se você estiver indo para mapear:Array.from(dna, mappingFunction)
.) (Não tão relevante aqui, eu assumodna
contém apenasc
,g
,t
, ea
.)Eu provavelmente:
Use um
for-of
loop (ou possivelmente mapeando com possível filtragem)Use um objeto de pesquisa ou mapa
Coloque a string em minúscula ou maiúscula ao alternar / procurar (mas entradas duplicadas na alternância / pesquisa também funcionam):
Se você sabe que
dna
só vai conterc
/C
,g
/G
,t
/T
/ oua
/A
(que, como eu a entendo, é verdade de DNA ;-)), então você pode usarArray.from
com o seu recurso de mapeamento com um objeto de pesquisa / Mapa:Estou usando
Array.from
porque ele dividirá a string em pontos de código , não apenas em unidades de código (não divide os pares substitutos) e possui um recurso de mapeamento se você fornecer uma função de mapeamento. (Basicamente,Array.from(str, mappingFunction)
é[...str].map(mappingFunction)
mas sem a matriz intermediária.) Provavelmente nem tudo é relevante aqui, considerando o conteúdo da sua string, mas pode importar se ela pode conter pares substitutos.Ou com um
Map
:Se você não pode fazer essa suposição, adicione
.filter
para filtrar as que não corresponderam:Ou, se você deseja evitar a criação de uma matriz extra, a mesma
filter
seria criadafor-of
(ou mesmo a suafor
):fonte
Você pode usar um mapeamento de pesquisa para simplificar o loop:
fonte
Talvez não seja reduzido, mas definitivamente mais sustentável.
Você também pode fazer:
fonte
Você pode tentar usar ae
switch case
umaforEach
função, assim:fonte
Você pode minúscula a string que permitirá remover a verificação da string capital:
fonte
fonte