Coc*_*ade 9 javascript arrays for-loop
此函数采用一串 DNA,例如“GTCA”,并返回一个包含正确匹配的 DNA 对的数组。
function pairDNA(dna) {
const pairs = []
for (let i = 0; i < dna.length; i ++) {
if (dna[i] === "C" | dna[i] === "c") {
pairs.push("CG");
} else if (dna[i] === "G"| dna[i] === "g") {
pairs.push("GC");
} else if (dna[i] === "T"| dna[i] === "t") {
pairs.push("TA");
} else if (dna[i] === "A"| dna[i] === "a") {
pairs.push("AT");
}
}
return pairs;
}
Run Code Online (Sandbox Code Playgroud)
这是对的。但是,我正在尝试找到一种更短、更简单的书写方式。任何人都可以帮助我解决我应该使用的问题吗?
Mah*_*Ali 13
您可以按以下步骤改进代码:
toLowerCase()在输入上使用。split使用字符串和map()它,而不是在其中创建数组push()值。function pairDNA(dna) {
const obj = {
c: 'CG',
g: 'GC',
t: 'TA',
a: "AT"
}
return dna.split('').map(x => obj[x.toLowerCase()])
}Run Code Online (Sandbox Code Playgroud)
如果字符串可以包含任何其他特定字母,那么您需要之后filter()的undefined值map
return dna.split('').map(x => obj[x.toLowerCase()]).filter(x => x !== undefined)
Run Code Online (Sandbox Code Playgroud)
@RobG 在评论中提到了另一个更好的方法,即我们可以在循环之前从字符串中删除不需要的字母。
return dna
.toLowerCase()
.replace(/[^cgta]/g,'')
.split('')
.map(x => obj[x])
Run Code Online (Sandbox Code Playgroud)