找到关于codefights问题的答案。我现在花了30分钟试图打破它,但我没有到达任何地方。真想弄清楚这一点。有人可以为我分解吗?
const test1 = [
['7', '.', '.', '.', '4', '.', '.', '.', '.'],
['.', '.', '.', '8', '6', '5', '.', '.', '.'],
['.', '1', '.', '2', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '9', '.', '.', '.'],
['.', '.', '.', '.', '5', '.', '7', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '2', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.', '.']
];
//Turn columns into rows
var transpose = grid =>
grid[0].map(
(_,c) => grid.map(
row => row[c]
)
);
var r = transpose(test1);
console.log(r);

答案 0 :(得分:1)
输出需要具有与输入中的列一样多的行,因此第一个映射会迭代输入中的列数。第二个映射遍历输入的行以提取每个列并将其作为输出的行返回。
答案 1 :(得分:1)
也许两个常规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;
}
答案 2 :(得分:1)
grid[0].map((_, c) => ...)
解析网格第一行的每个项目(['7', '.', '.', '.', '4', '.', '.', '.', '.']
),并将每个项目的索引传递给c
。
grid.map(row => row[c])
为网格的每一行返回一个新数组中c
列的值。
因此它创建了一个列项数组数组:新网格。