Javascript 通过数组循环以创建二维数组-循环不工作?

Javascript 通过数组循环以创建二维数组-循环不工作?,javascript,multidimensional-array,Javascript,Multidimensional Array,下面的代码应该接受输入并创建字母对的2D数组-[[“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] === "

下面的代码应该接受输入并创建字母对的2D数组-[[“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");
函数对(str){
var成对=[];
var str=str.split(“”);

对于(i=0;i而言,
拼接
是个问题。您需要的是:

var newStr = [str[i]];
您需要在索引所指向的字符处对其进行索引,然后将其包装到
[]
中,因为您希望将其视为一个数组


在原来的代码中,你根本没有向前移动你的循环。更糟的是,因为<代码>剪接< /代码>修改了原来的字符串,它的<代码>长度<代码>也改变了,使得循环运行的次数比它少。

只是为了促进更多的可读代码的思维功能,请考虑这样写的方式:

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

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

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

拼接时,数组长度会减少