获取数组结果不按顺序

时间:2017-03-13 02:24:19

标签: javascript

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 个答案:

答案 0 :(得分: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"));

您的代码也可以使用对象而不是2D数组进行简化,并使用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"));