2017-03-13 9 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")); 

Ich möchte Paarungsresultat in der Reihenfolge des Arguments, das an die Hauptfunktion übergeben wird. Das Ergebnis dieses Codes sollte [['A','T'],['T','A'],['C','G'],['G','C'],['A','T']] sein, aber ich bekomme als [['G','C'],['C','G'],['A','T'],['A','T'],['T','A']]Erhalten eines Array-Ergebnisses nicht in Reihenfolge

Antwort

1

Ihre inneren und äußeren Schleifen sind umgedreht. Die äußere Schleife sollte über die Zeichenfolge iterieren, und die innere Schleife sollte über das Array iterieren.

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"));

Ihr Code auch ein Objekt anstelle eines 2D-Arrays vereinfacht werden kann unter Verwendung von und mit 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

Kühler gibt es trotzdem kann ich mach es funktional? –

+0

@SeanT Sicherlich ist das zweite Code-Snippet funktioneller. – 4castle

+0

Oh ja, ich habe das Code-Snippet auch gesehen, aber ich weiß nicht, dass ECMA6 in ECMA5 etwas Funktionelles wollte :) –

Verwandte Themen