Эта функция берет строку ДНК, такую как 'GTCA', и возвращает массив, содержащий правильно подобранные пары ДНК.
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;
}
Это правильно. Однако я пытаюсь найти более короткий и простой способ написать это. Может ли кто-нибудь помочь мне с тем, что я должен использовать?
javascript
arrays
for-loop
CocoFlade
источник
источник
|
не выполняет логическое ИЛИ в Javascript, как||
||
хотя было бы лучше).Ответы:
Вы можете улучшить свой код, выполнив следующие действия:
toLowerCase()
на входе.split
использовать строку иmap()
ее, а не создаватьpush()
в ней значения массива .Если строка может содержать любые другие конкретные письма , то вам необходимо
filter()
вundefined
значениях послеmap
@RobG в комментариях упоминает еще одно лучшее, что мы можем удалить ненужные буквы из строки перед ее циклическим просмотром.
источник
undefined
значения в вашем окончательном массиве.dna.toLowerCase().replace(/[^cgta]/g,'')...
. ;-)[...dna]
. Это не разбивает суррогатные пары. (ИлиArray.from
, что особенно полезно , если вы собираетесь на карту:Array.from(dna, mappingFunction)
). (Не все , что отношение здесь, я полагаю ,dna
только содержитc
,g
,t
иa
.)Я бы наверное:
Используйте
for-of
цикл (или, возможно, отображение с возможной фильтрацией)Используйте поисковый объект или карту
При переключении / поиске сделайте строку строчной или прописной (но дублированные записи в переключателе / поиске тоже работают):
Если вы знаете, что он
dna
будет когда-либо содержать толькоc
/C
,g
/G
,t
/T
/ илиa
/A
(что, как я понимаю, верно для ДНК ;-)), то вы можете использоватьArray.from
его функцию сопоставления с объектом поиска / Map:Я использую,
Array.from
потому что он разделит строку на кодовые точки , а не только на кодовые единицы (не разбивает суррогатные пары) и имеет функцию отображения, если вы предоставляете функцию отображения. ( В основном,Array.from(str, mappingFunction)
это ,[...str].map(mappingFunction)
но без промежуточного массива.) Вероятно , не все , что отношение здесь дается содержание вашей строки, но может иметь значение , если ваша строка может содержать суррогатные пары.Или с
Map
:Если вы не можете сделать это предположение, добавьте,
.filter
чтобы отфильтровать те, у которых не было совпадения:Или, если вы хотите избежать создания дополнительного массива, который вы
filter
бы создали, придерживайтесьfor-of
(или даже вашегоfor
):источник
Вы можете использовать поисковое отображение, чтобы упростить цикл:
источник
Может быть, не сокращен, но определенно более ремонтопригоден.
Вы также можете сделать:
источник
Вы можете попробовать использовать функцию
switch case
иforEach
, например, так:источник
Вы можете использовать строчные буквы в нижнем регистре, что позволит вам удалить проверку заглавной строки:
источник
источник