मैं शायद:
एक for-ofलूप का उपयोग करें (या संभव फ़िल्टरिंग के साथ संभवतः मैपिंग)
लुकअप ऑब्जेक्ट या मैप का उपयोग करें
स्विचिंग / अप करते समय स्ट्रिंग को कम या ऊपरी स्थिति में बनाएं (लेकिन स्विच / लुकअप कार्य में डुप्लिकेट की गई प्रविष्टियाँ):
यदि आप जानते हैं कि dnaइसमें केवल c/ C, g/ G, t/ T/, या a/ A(जो, जैसा कि मैं समझता हूं, डीएनए; ;-)) का सच है, तो आप Array.fromलुकिंग ऑब्जेक्ट / मैप के साथ इसकी मैपिंग सुविधा के साथ उपयोग कर सकते हैं :
const table = {
c: "CG",
g: "GC",
t: "TA",
a: "AT"
};
function pairDNA(dna) {
return Array.from(dna, entry => table[entry.toLowerCase()]);
}
मैं उपयोग कर रहा हूं Array.fromक्योंकि यह कोड बिंदुओं पर स्ट्रिंग को विभाजित करेगा , न कि केवल कोड इकाइयां (सरोगेट जोड़े को नहीं तोड़ता है) और एक मैपिंग सुविधा है यदि आप एक मैपिंग फ़ंक्शन प्रदान करते हैं। (मूल रूप से, Array.from(str, mappingFunction)है [...str].map(mappingFunction)शायद बिल्कुल नहीं है कि यहां प्रासंगिक अपने स्ट्रिंग की सामग्री दी है, लेकिन अगर आपके स्ट्रिंग सरोगेट जोड़े हो सकती है बात कर सकते हैं लेकिन मध्यवर्ती सरणी के बिना।)।
या एक के साथ 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()));
}
यदि आप उस धारणा को नहीं बना सकते हैं, .filterतो उन लोगों को फ़िल्टर करने के लिए जोड़ें जिनके पास मैच नहीं था:
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);
}
या यदि आप अतिरिक्त सरणी बनाने से बचना filterचाहते हैं, तो for-of(या यहां तक कि 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;
}