2015-05-05 2 views
0
function pair(str) { 

    var dna = []; 
    var dnaarr = []; 

    for(var i = 0; i < str.length; i++) { 

     if(str[i].indexOf('G') === 0) { 
     var a = dna.push('C'); 
     } 
     if(str[i].indexOf('C') === 0) { 
     var b = dna.push('G'); 
     } 
     if(str[i].indexOf('A') === 0) { 
     var c = dna.push('T'); 
     } 
     if(str[i].indexOf('T') === 0) { 
     var d = dna.push('A'); 
     } 

    } 
    for(var j = 0; j < str.length; j++) { 
     var e = dnaarr.push(str[j]); 
     var f = dnaarr.push(dna[j]); 
    } 

    return dnaarr; 
} 

pair("ATGCG"); 

Когда я запускаю этот код, он возвращаетднк спаривание, толкая массив внутри массива

[ 'A', 'T', 'T', 'A', 'G', 'C', 'C', 'G', 'G', 'C' ] 

мне это нужно, чтобы вернуть

[['A', 'T'], ['T', 'A'], ['G', 'C'], ['C','G'], ['G', 'C']] 

Может кто-нибудь, пожалуйста, помогите мне с этим кодом?

+0

Вы можете изменить строку 'str [i] .indexOf()' только на 'str [i] === 'G'', так как это будет один символ. Или вы можете использовать случай переключения. – gin93r

ответ

1

Это была проблема с нажатием массива.

function pair(str) { 
 

 
    
 
    var dnaarr = []; 
 
    //var dnatot = []; 
 

 
    for(var i = 0; i < str.length; i++) { 
 
     var dna = []; 
 
dna.push(str[i]); //pushing current str[i] 
 
     if(str[i].indexOf('G') === 0) { 
 
     var a = dna.push('C'); 
 
     } 
 
     if(str[i].indexOf('C') === 0) { 
 
     var b = dna.push('G'); 
 
     } 
 
     if(str[i].indexOf('A') === 0) { 
 
     var c = dna.push('T'); 
 
     } 
 
     if(str[i].indexOf('T') === 0) { 
 
     var d = dna.push('A'); 
 
     } 
 
dnaarr.push(dna); //pushing the array dna to the main array dnaarr 
 
    } 
 
    
 

 
    return dnaarr; 
 
} 
 

 
console.log(pair("ATGCG"));

+0

большое вам спасибо! – jyoon006

6

Вот простой вариант:

function pair(str) 
{ 
    // Array to hold the pairs 
    var dna = []; 
    // Loop through the string 
    for (var i = 0; i < str.length; i++) { 
     // Switch based on the current letter in the string 
     // Push an array to dna with the current string and it's pair 
     // in the case of 'G' the array would be ['G','C'] 
     // dna would then be [['G','C']] 
     switch(str[i]) 
     { 
      case "G": 
       dna.push([str[i],"C"]); 
       break; 
      case "C": 
       dna.push([str[i],"G"]); 
       break; 
      case "A": 
       dna.push([str[i],"T"]); 
       break; 
      case "T": 
       dna.push([str[i],"A"]); 
       break; 
     }; 
    } 
    // return the array 
    return dna; 
} 

pair("ATGCG") 
+0

Это объясняется в комментариях. – gin93r

+0

Правильно, я удалил. – peterh

-1

Другой, вероятно, проще и чище, ее вариант:

function pair(str) { 
    var arr = str.split(''), 
     newArr = []; 

    arr.forEach(function(e){ 

    if (e == 'A') { 
     newArr.push([e, 'T']); 
    } else if (e == 'T') { 
     newArr.push([e, 'A']); 
    } else if (e == 'G') { 
     newArr.push([e, 'C']); 
    } else { 
     newArr.push([e, 'G']); 
    } 

    }); 

    return newArr; 
} 

Пример:

pair('GATC'); 

вернется:

[['G','C'], ['A','T'], ['T', 'A'], ['C', 'G']] 
+0

Хотя код оценен, он всегда должен иметь сопроводительное объяснение. Это не должно быть долго, но это ожидается. – peterh

-1
function pair(str) { 
    // object of dna paring key, value 
    var pairing = { 
     "A": "T", 
     "T": "A", 
     "C": "G", 
     "G": "C" 
     }, 
     // array to store paired object 
     final = []; 
    // make an array by .split and map that array by using the dna paring object 
    final = str.split('').map(function(val) { 
    var arr = []; 
    arr.push(val, pairing[val]); 
    return arr; 
    }); 

    // return the array of paired objects 
    return final; 
} 
+1

Хотя код оценен, он всегда должен иметь сопроводительное объяснение. Это не должно быть долго, но это ожидается. – peterh

0

Я нашел этот подход, чтобы быть самым читаемым. Объяснение в примечаниях

function pairElement(str) { 
    // base pairs defined by proj requirements 
    var basePairs = {"A": "T", "T": "A", "C": "G", "G": "C"}; 
    var newGeneCodeArr = []; 
    for (var i = 0; i < str.length; i++) { 
    // build individual sequence pair that fits requirements 
    var newGeneCode = []; 
    newGeneCode.push(str[i]); 
    newGeneCode.push(basePairs[str[i]]); 
    newGeneCodeArr.push(newGeneCode); 
    } 
    return newGeneCodeArr; 
} 
1

Я считаю, что это очень легко читать и понимать.

function pairElement(str) { 
    var pairs = { 'G': 'C', 'C': 'G', 'A': 'T', 'T': 'A' }; 

    return str.split('').map(function(char) { 
    return [char, pairs[char]]; 
    }); 
} 

pairElement("GCG"); // [['G', 'C'], ['C', 'G'], ['G', 'C']] 

EDIT: код упрощается. В начале функции мы создаем объект с возможными парами символов. Используя split и map методы массива, мы соединяем каждый символ из str с парами объектов.

0
function pairElement(str) { 
    //convert the string into array of characters 
    str = str.split(''); 
    //define a multidimensional array to hold pairing 
    var arr = []; 
    //using the for loop, we can check for each character 
    for(var i=0; i<str.length; i++) 
    { 
     var tmp = []; 
     //checking characters and adding pairs inside a tmp array 
     switch(str[i]){ 
     case 'G': 
      tmp.push(str[i]); 
      tmp.push('C'); 
      break; 
     case 'C': 
      tmp.push(str[i]); 
      tmp.push('G'); 
      break; 
     case 'T': 
      tmp.push(str[i]); 
      tmp.push('A'); 
      break; 
     case 'A': 
      tmp.push(str[i]); 
      tmp.push('T'); 
      break; 
     } 

     //if tmp has something inside, add it to the multidimensional array 
     if(tmp.length > 0) 
     arr.push(tmp); 
    } 

    return arr; 
} 


pairElement("GCG"); 
+0

Пожалуйста, кратко объясните свой код. –

+0

Я добавил несколько комментариев, чтобы объяснить, как работает код –

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