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 berisi c
/ C
, g
/ G
, t
/ T
/, atau a
/ A
(yang, seperti yang saya pahami, adalah benar dari DNA ;-)), maka Anda dapat menggunakan Array.from
fitur pemetaannya dengan objek pencarian / Peta:
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
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
:
const table = new Map([
[c, "CG"],
[g, "GC"],
[t, "TA"],
[a, "AT"]
]);
function pairDNA(dna) {
return Array.from(dna, entry => table.get(entry.toLowerCase()));
}
Jika Anda tidak dapat membuat asumsi itu, tambahkan .filter
untuk memfilter yang tidak cocok:
function pairDNA(dna) {
return Array.from(dna, entry => table.get(entry.toLowerCase())).filter(Boolean);
// or if using an object: return dna.map(entry => table[entry.toLowerCase()]).filter(Boolean);
}
Atau jika Anda ingin menghindari membuat array tambahan yang filter
akan dibuat, tetap dengan for-of
(atau bahkan Anda for
):
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
const pairs = [];
for (const entry of dna) {
const value = table[entry.toLowerCase()];
if (value) {
pairs.push(value);
}
}
return pairs;
}