function dnaStrand(dna){
const compl = dna;
dna.includes("A") && compl.replace(/A/g, "T");
dna.includes("T") && compl.replace(/T/g, "A")
dna.includes("C") && compl.replace(/C/g, "G")
dna.includes("G") && compl.replace(/G/g, "C")
console.log(compl)
return compl
}
我打算形成互补DNA链,即A与T互补,C与G互补。
输入>>>输出 ATGC >>>> TACG
String.replace
不修改原始字符串(为什么?因为String
是不可变)。
您可以尝试重新映射值,例如:
console.log(dnaStrand(`ATGC`));
function dnaStrand(dna){
return [...dna].map( v => {
switch(v) {
case `A`: return `T`;
case `T`: return `A`;
case `C`: return `G`;
default: return `C`
}
}).join(``);
}
String.replace
可以这样使用:
const dna = `ATGC`;
console.log(`dnaStrand(dna) => ${dnaStrand(dna)}, dna still => ${dna}`);
function dnaStrand(dna){
const complements = {A: `T`, T: `A`, C: `G`, G: `C`};
return dna.replace(/[ACGT]/g, letter => complements[letter]);
}
问题是您正在使用替换,并且字符串在 JS 中是不可变的,因此解释器不会修改字符串,而是会转换一个新的修改后的字符串
在您的示例中,您的替换也存在逻辑问题:一旦将“A”替换为“T”,如果您立即将“T”替换为“A”,它将恢复第一个替换。
以下是如何使用地图获得所需结果:
function dnaStrand(dna) {
const complements = {
'A': 'T',
'T': 'A',
'C': 'G',
'G': 'C'
};
const compl = dna.split('').map(char => complements[char]).join('');
console.log(compl);
return compl;
}
console.log(dnaStrand("ATGC"));