以下应该接受输入并创建一个字母对的二维数组 - [[“A”,“T”],[“T”,“A”],[“C”,“G”]]但是它目前只返回[[“A”,“T”],[“T”,“A”]],这让我怀疑我的循环逻辑有问题。
function pair(str) {
var paired = [];
var str = str.split("");
for (i=0; i<str.length; i++) {
var newStr = str.splice(0,1);
if (newStr[0] === "A") {
newStr.push("T");
}
if (newStr[0] === "T") {
newStr.push("A");
}
if (newStr[0] === "C") {
newStr.push("G")
}
if (newStr[0] === "G") {
newStr.push("C")
}
paired.push(newStr);
}
return paired;
}
pair("ATC");
答案 0 :(得分:1)
只是为了促进更具可读性的代码的思考,考虑这种写作方式:
pair={"A":"T","T":"A","C":"G","G":"C"};
"ATC".split("").map(function(letter){return [letter,pair[letter]];})
split
使字符串成为一个数组(如您所知),然后数组的map
方法允许您对此数组中的每个项目使用该项目上提供的函数来生成一个新阵列。
答案 1 :(得分:0)
splice
是问题所在。你想要的是:
var newStr = [str[i]];
您需要将其索引到索引指向的字符,然后换行[]
,因为您希望将其视为数组。
在您的原始代码中,您根本没有继续使用循环。更糟糕的是,因为splice
修改了原始字符串,其length
也发生了变化,使循环运行的次数少于应有的次数。