Muhtemelen:
Bir for-of
dö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):
dna
Sadece 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.from
bir 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ı .filter
yapamı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;
}