Fungsi ini mengambil string DNA seperti 'GTCA' dan mengembalikan array yang berisi pasangan DNA yang cocok dengan benar.
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;
}
Ini benar. Namun saya mencoba mencari cara yang lebih pendek, lebih sederhana untuk menulisnya. Adakah yang bisa membantu saya dengan apa yang seharusnya saya gunakan?
javascript
arrays
for-loop
CocoFlade
sumber
sumber
|
tidak melakukan logika ATAU dalam Javascript seperti||
||
akan lebih baik, meskipun).Jawaban:
Anda dapat meningkatkan kode Anda dalam langkah-langkah berikut:
toLowerCase()
pada input.split
menggunakan string danmap()
alih-alih menciptakanpush()
nilai array ke dalamnya.Jika string bisa berisi apa pun selain huruf-huruf tertentu maka Anda perlu
filter()
yangundefined
nilai setelahmap
Lain yang lebih baik disebutkan oleh @RobG di komentar bahwa kita dapat menghapus surat yang tidak diinginkan dari string sebelum mengulanginya.
sumber
undefined
nilai dalam array akhir Anda.dna.toLowerCase().replace(/[^cgta]/g,'')...
. ;-)[...dna]
. Itu tidak memecah pasangan pengganti. (AtauArray.from
, yang sangat berguna jika Anda akan untuk memetakan:Array.from(dna, mappingFunction)
.) (Tidak semua yang relevan di sini, saya asumsikandna
hanya berisic
,g
,t
, dana
.)Saya mungkin akan:
Gunakan
for-of
perulangan (atau mungkin pemetaan dengan kemungkinan penyaringan)Gunakan objek pencarian atau Peta
Jadikan string huruf besar atau kecil saat beralih / melihat ke atas (tetapi entri yang digandakan dalam sakelar / pencarian juga berfungsi):
Jika Anda tahu bahwa
dna
hanya akan berisic
/C
,g
/G
,t
/T
/, ataua
/A
(yang, seperti yang saya pahami, adalah benar dari DNA ;-)), maka Anda dapat menggunakanArray.from
fitur pemetaannya dengan objek pencarian / Peta:Saya menggunakan
Array.from
karena akan membagi string pada poin kode , bukan hanya unit kode (tidak memecah pasangan pengganti) dan memiliki fitur pemetaan jika Anda menyediakan fungsi pemetaan. (Pada dasarnya,Array.from(str, mappingFunction)
adalah[...str].map(mappingFunction)
tetapi tanpa array menengah.) Mungkin tidak semua yang relevan di sini diberikan konten string Anda, tetapi dapat menjadi masalah jika string Anda mungkin berisi pasangan pengganti.Atau dengan
Map
:Jika Anda tidak dapat membuat asumsi itu, tambahkan
.filter
untuk memfilter yang tidak cocok:Atau jika Anda ingin menghindari membuat array tambahan yang
filter
akan dibuat, tetap denganfor-of
(atau bahkan Andafor
):sumber
Anda dapat menggunakan pemetaan pencarian untuk menyederhanakan loop:
sumber
Mungkin tidak disingkat tapi jelas lebih bisa dipertahankan.
Anda juga bisa:
sumber
Anda dapat mencoba menggunakan
switch case
dan fungsiforEach
, seperti ini:sumber
Anda dapat menggunakan huruf kecil string yang memungkinkan Anda untuk menghapus pemeriksaan string modal:
sumber
sumber