Javascript错误:“不是函数”

时间:2015-06-18 07:19:22

标签: javascript

碱基对是一对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"]

看起来很有效。

有人能告诉我哪里错了吗?

3 个答案:

答案 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('');

您的原始功能有效,因为您也可以使用[]访问字符串。