Javascript 有人能帮我把这个复杂的映射函数分解一下吗?

Javascript 有人能帮我把这个复杂的映射函数分解一下吗?,javascript,Javascript,找到了一个关于代码战的问题的答案。我已经花了30分钟试图打破它,但我没有任何进展。我真的很想弄明白。谁能帮我把它分解一下吗 const test1=[ ['7', '.', '.', '.', '4', '.', '.', '.', '.'], ['.', '.', '.', '8', '6', '5', '.', '.', '.'], ['.', '1', '.', '2', '.', '.', '.', '.', '.'], ['.', '.', '.', '.', '.', '9', '

找到了一个关于代码战的问题的答案。我已经花了30分钟试图打破它,但我没有任何进展。我真的很想弄明白。谁能帮我把它分解一下吗

const test1=[
['7', '.', '.', '.', '4', '.', '.', '.', '.'],
['.', '.', '.', '8', '6', '5', '.', '.', '.'],
['.', '1', '.', '2', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '9', '.', '.', '.'],
['.', '.', '.', '.', '5', '.', '7', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '2', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.']
];
//将列转换为行
变量转置=网格=>
网格[0]。映射(
(u,c)=>grid.map(
行=>行[c]
)
);
var r=转置(test1);

控制台日志(r)输出中的行数必须与输入中的列数相同,因此第一个映射将迭代输入中的列数。第二个映射在输入行上迭代,以提取每一列并将其作为输出行返回。

也许两个常规for循环更清楚:

function transpose(arr){
 var transposed=[];
 for(var row=0;row<arr[0].length;row++){
   var inner=[];/*new row*/
   for(var column=0;column<arr.length;column++){
    inner[column /*now row*/]=arr[column][row];
   }
  transposed.push(inner);
 }
return transposed;
}
函数转置(arr){
var转置=[];
对于(变量行=0;行
分析网格第一行的每一项(
['7'、'、'、'、'4'、'、'、'、'、'、'..、'.'.'.]
),并将每一项的索引传递给
c

grid.map(row => row[c])
对于网格的每一行,返回新数组中列
c
的值


因此,它创建了一个列项目数组:新网格。

它按照它的名字命名。它对矩阵进行转置,意味着将给定矩阵的每一行都更改为输出矩阵的每一列。您是否尝试过遍历代码并查看每个方法的API?这里没有特别复杂的内容。它是一个在第一行上单击并替换为一列。@当您不关心参数是什么时,通常使用神圣下划线。例如,如果您有一个事件处理程序,而事件对象本身并不重要:
.addEventListener('click',_=>…)
@shawn rieger,它不是写给您的,因为输出需要每列有一行。通过迭代第一行,您正在迭代列数,因此第二个映射忽略数组中的值(即下划线变量),而只是使用索引(即
c
变量)。
grid.map(row => row[c])