碱基对是一对AT和CG。我正在尝试将缺少的元素与提供的字符进行匹配,并将结果作为二维数组返回。
当我使用下面的方法时,它工作正常。
function pair(str) {
str.split("");
//convert the string into an array
var newArray = [];
for (var i = 0; i < str.length; i++){
var subArray = [];
switch (str[i]){
case "G":
subArray.push("G", "C");
break;
case "C":
subArray.push("C", "G");
break;
case "A":
subArray.push("A", "T");
break;
case "T":
subArray.push("T", "A");
break;
}
newArray.push(subArray);
}
return newArray;
}
pair("GCG");
//[["G", "C"], ["C", "G"], ["G", "C"]]
但是,当我尝试将方法从push()
更改为splice()
时,如下所示,它不起作用。
function pair(str) {
str.split("");
for (var i = 0; i < str.length; i++){
var subArray = [];
switch (str[i]){
case "G":
subArray.push("G", "C");
break;
case "C":
subArray.push("C", "G");
break;
case "A":
subArray.push("A", "T");
break;
case "T":
subArray.push("T", "A");
break;
}
str.splice(i, 1, subArray);
}
return str;
}
pair("GCG");
//ERROR:"str.splice is not a function"
起初我认为此方法失败的原因是我们无法将splice()
中的第三个参数设置为数组。所以我尝试了这个:
["G", "C", "G"].splice(0,1,["G","C"]) //["G"]
看起来很有效。
有人能告诉我哪里错了吗?
答案 0 :(得分:2)
str.splice(i, 1, subArray);
str是字符串。
数组的.splice()方法
检查你的逻辑(或错误可能应该有subArray)
subArray.splice(i, 1, subArray);
答案 1 :(得分:1)
string.split()
函数不会自我变异。它会返回一个数组,并保持其自身不变为字符串。您希望将str
分割为此代码行str.split("")
中的单个字符并进行处理。所以请看下面的代码:
function pair(str) {
var tokens = str.split("");
for (var i = 0; i < tokens.length; i++){
var subArray = [];
switch (tokens[i]){
case "G":
subArray.push("G", "C");
break;
case "C":
subArray.push("C", "G");
break;
case "A":
subArray.push("A", "T");
break;
case "T":
subArray.push("T", "A");
break;
}
tokens.splice(i, 1, subArray);
}
return str; // Not sure if you intend to return original str or not
// So please see my note below:
}
我不确定代码的底部是否确实要返回字符串。
注意:如果您想将subArray
中的这些字符追加回str
并返回,则可以执行以下操作:
return tokens.concat(subArray).join('');
答案 2 :(得分:0)
String.prototype.split
不会将字符串更改为数组,而是返回一个数组。所以你可以这样做str = str.split('');
您的原始功能有效,因为您也可以使用[]
访问字符串。