2016-11-09 8 views
1

私は比較的若い開発者であり、私はいくつかのことについて混乱しています。ここで DNAペアリング、アレイ

は私のコードです:

function pairElement(str) { 

    var arr = []; 
    var pairs = [ 
    ["A","T"], 
    ["T","A"], 
    ["C","G"], 
    ["G","C"] 
    ]; 

    var spl = str.split(""); 

    for(var i = 0; i<pairs.length; i++){ 
     for(var j= 0; j<spl.length; j++){ 
      if(pairs[i][0] == spl[j]){ 
       arr.push(pairs[i]); 
      } 
     } 
    } 

    return arr; 
} 
pairElement("ATCGA"); 

問題は、関数は、この配列を私に戻って与えることである:[[ "A"、 "T"]、[ "A"、 "T"]、[ "T"、 "A"]、["C"、 "G"]、["G"、 "C"]

私はすべてのペアを持っていますが、新しい配列は私に結果を私に与えています対の配列を書いた、なぜそれは?

+0

あなたはあなたの関数の期待される動作を説明してもらえますか? – Aaron

+0

pairElement( "AT")を使って呼び出すと、AT、TAのペアが得られますが、pairElement( "TA")を使用して呼び出す場合は、私は同じ結果を得る.. –

+0

さて、私はそれを得ると思います。私が間違っていない場合、結果の順序は 'pair'配列の順番に基づいています。外側' for'ループは入力文字列ではなく、その配列を反復するからです。私はあなたの2つのループを単純に逆にして、期待される結果を得ることができると思います。 – Aaron

答えて

0

ペアを使用して配列へのアクセス時間を短くすることをお勧めします。オブジェクトを使用し、文字をキーとして使用できます。

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

 
    return str.split("").map(function (a) { 
 
     return pairs[a]; 
 
    }); 
 
} 
 

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

+1

ありがとう..私はmap()関数で何かを試しましたが、 "物事がどのように動作するか"を理解することがより重要でした:) –

+0

それは別のアプローチを示すことです。 –

関連する問題