Saya mungkin akan:
Gunakan for-ofperulangan (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 dnahanya 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.fromfitur 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.fromkarena 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 .filteruntuk 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 filterakan 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;
}