循环遍历数组以创建2D数组 - 循环不起作用?

时间:2015-10-15 18:12:31

标签: javascript multidimensional-array

以下应该接受输入并创建一个字母对的二维数组 - [[“A”,“T”],[“T”,“A”],[“C”,“G”]]但是它目前只返回[[“A”,“T”],[“T”,“A”]],这让我怀疑我的循环逻辑有问题。

function pair(str) {
var paired = [];
var str = str.split("");

for (i=0; i<str.length; i++) {

var newStr = str.splice(0,1);

  if (newStr[0] === "A") {
   newStr.push("T");
  }
  if (newStr[0] === "T") {
   newStr.push("A");
  }
  if (newStr[0] === "C") {
   newStr.push("G")
  }
  if (newStr[0] === "G") {
   newStr.push("C")
  }

paired.push(newStr);
}
   return paired;
}

pair("ATC");

2 个答案:

答案 0 :(得分:1)

只是为了促进更具可读性的代码的思考,考虑这种写作方式:

pair={"A":"T","T":"A","C":"G","G":"C"};

"ATC".split("").map(function(letter){return [letter,pair[letter]];})

split使字符串成为一个数组(如您所知),然后数组的map方法允许您对此数组中的每个项目使用该项目上提供的函数来生成一个新阵列。

答案 1 :(得分:0)

splice是问题所在。你想要的是:

var newStr = [str[i]];

您需要将其索引到索引指向的字符,然后换行[],因为您希望将其视为数组。

在您的原始代码中,您根本没有继续使用循环。更糟糕的是,因为splice修改了原始字符串,其length也发生了变化,使循环运行的次数少于应有的次数。