有人可以为我打破这个复杂的地图功能吗?

时间:2017-06-27 13:29:06

标签: javascript

找到关于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);




3 个答案:

答案 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列的值。

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