Tôi có thể:
Sử dụng một for-of
vòng lặp (hoặc có thể ánh xạ với khả năng lọc)
Sử dụng một đối tượng tra cứu hoặc Bản đồ
Đặt chuỗi chữ thường hoặc chữ hoa khi chuyển đổi / tra cứu (nhưng các mục trùng lặp trong công tắc / tra cứu cũng hoạt động):
Nếu bạn biết rằng dna
sẽ chỉ bao giờ chứa c
/ C
, g
/ G
, t
/ T
/ hoặc a
/ A
(trong đó, như tôi hiểu nó, đúng với DNA ;-)), sau đó bạn có thể sử dụng Array.from
với tính năng lập bản đồ của mình với một đối tượng tra cứu / Bản đồ:
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
Tôi đang sử dụng Array.from
vì nó sẽ phân tách chuỗi trên các điểm mã , không chỉ các đơn vị mã (không phá vỡ các cặp thay thế) và có tính năng ánh xạ nếu bạn cung cấp chức năng ánh xạ. (Về cơ bản, Array.from(str, mappingFunction)
là [...str].map(mappingFunction)
nhưng không có mảng trung gian.) Có lẽ không phải tất cả những gì liên quan ở đây đưa ra nội dung của chuỗi của bạn, nhưng có thể có vấn đề nếu chuỗi bạn có thể chứa cặp thay thế.
Hoặc với một 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()));
}
Nếu bạn không thể đưa ra giả định đó, hãy thêm .filter
vào để lọc ra những cái không khớp:
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);
}
Hoặc nếu bạn muốn tránh tạo mảng bổ sung, bạn filter
sẽ tạo, gắn bó với for-of
(hoặc thậm chí là của bạn 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;
}