2015-06-18 3 views
0

Базовые пары - это пара AT и CG. Я пытаюсь сопоставить отсутствующий элемент с предоставленным символом и возвращать результаты в виде массива 2d.Ошибка Javascript: «не является функцией»

Когда я использовал метод ниже, он отлично работает.

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

ACGT? Является ли эта ДНК? –

+0

Вы используете фреймы или закладки? – User2012384

+0

Является ли 'str' строкой? –

ответ

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
str.splice(i, 1, subArray); 

страница страница.

метод

.splice() из массива

Проверьте логику (или опечатка возможно должно быть подмассив)

subArray.splice(i, 1, subArray); 
+0

Спасибо !!! Метод split() возвращает новый массив без изменения исходной строки. Спасибо за вашу помощь! –

0

String.prototype.split не изменяет строку в массив, он возвращает массив. Таким образом, вы можете это сделать str = str.split('');

Ваша оригинальная функция работала, потому что вы можете получить доступ к строкам с помощью [].

Смежные вопросы