2017-03-13 14 views
0
function pairElement(str) { 
    var arr = [['G','C'],['C','G'],['A','T'],['T','A']],b=[] 
    for(var k=0;k<arr.length;++k){ 
     var res = arr.filter(function(v){ 

      return v; 

     })[k][0] 
     var j=0; 
     while(j<str.length){ 

      if(str[j]===res){ 

       b.push(arr[k]) 
      } 
      j++; 
     } 
    } 
    return b; 
} 

console.log(pairElement("ATCGA")); 

main関数に渡された引数の順番で結果をペアにする必要があります。このコードの結果は [['A','T'],['T','A'],['C','G'],['G','C'],['A','T']]になるはずですが、私は次のようになります[['G','C'],['C','G'],['A','T'],['A','T'],['T','A']]配列の結果を順番に取得しない

答えて

1

内側ループと外側ループが反転します。外側のループは文字列を反復処理し、内側のループは配列を反復処理する必要があります。

function pairElement(str) { 
 
    var arr = [['G', 'C'], ['C', 'G'], ['A', 'T'], ['T', 'A']], 
 
     b = []; 
 
    for (var k = 0; k < str.length; k++) { 
 
    for (var j = 0; j < arr.length; j++) { 
 
     if (str[k] === arr[j][0]) { 
 
     b.push(arr[j]); 
 
     } 
 
    } 
 
    } 
 
    return b; 
 
} 
 

 
console.log(pairElement("ATCGA"));

コードは、オブジェクトの代わりに、2次元アレイを用いて簡略化し、かつArray#mapとすることができる。

function pairElement(str) { 
 
    var pairs = { 'G': 'C', 'C': 'G', 'A': 'T', 'T': 'A' }; 
 
    return str.split('').map(ch => [ch, pairs[ch]]); 
 
} 
 

 
console.log(pairElement("ATCGA"));

+0

クール私ができるとにかくありますそれは機能的に行うのですか? –

+0

@SeanT確かに、2番目のコードスニペットはより機能的です。 – 4castle

+0

Ohh yeah私もこのコードスニペットを見ましたが、ECMA6がECMA5で何か機能したいと思っているのを知らないのです:) –

関連する問題