2016-11-09 44 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」]]

我有所有的對,但新的數組給我結果I寫了對數組,爲什麼呢?

+0

你能描述你的函數的預期行爲? – Aaron

+0

如果與pairElement(「AT」)的呼叫我得到對AT,TA但如果與pairElement(「TA」);我得到了相同的結果.. –

+0

好吧,我想我明白了。如果我沒有弄錯,你的結果順序是基於你的'pairs'數組的順序,因爲你的外部'for'循環遍歷數組,而不是輸入字符串。我想你可以簡單地反轉你的兩個for循環,並得到你的預期結果。 – 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

沒關係,它只是展示一種不同的方法。 –