Muhtemelen:
Bir for-ofdöngü kullanın (veya olası filtreleme ile eşleme yapın)
Bir arama nesnesi veya Harita kullanma
Geçiş yaparken / ararken dizeyi küçük veya büyük yapın (ancak anahtar / aramadaki yinelenen girişler de çalışır):
dnaSadece c/ C, g/ G, t/ T/ veya a/ A(bu, anladığım kadarıyla DNA ;-) için geçerlidir) içereceğini biliyorsanız , o zaman Array.frombir arama nesnesi / Harita ile eşleme özelliği ile kullanabilirsiniz :
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
Ben sadece kod birimleri (vekil çiftleri ayrılmaz) değil Array.from, kod noktalarında dize bölünecek ve bir eşleme işlevi sağlarsanız bir eşleme özelliği vardır çünkü kullanıyorum . (Temel olarak, Array.from(str, mappingFunction)olduğunu [...str].map(mappingFunction)ancak orta dizinin olmadan.) Buraya alakalı dize içeriğini göz önüne alındığında, ancak dize vekil çiftleri içerebilir eğer önemli olabilir Muhtemelen hayır, hepsi bu.
Veya aşağıdakilerle 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()));
}
Bu varsayımı .filteryapamıyorsanız, eşleşmeyenleri filtrelemek için ekleyin :
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);
}
Ya da yaratacağı ekstra diziyi oluşturmaktan kaçınmak istiyorsanız filter, for-of(veya hatta for) ile sadık kalın :
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;
}