简体   繁体   English

Javascript-将列转换为行

[英]Javascript - Converting columns into rows

relatively new to JS, trying to understand this code which takes an array of arrays and converts its columns into arrays. JS相对较新,因此试图理解此代码,该代码需要一个数组数组并将其列转换为数组。

grid= 
[[".",".",".","1","4",".",".","2","."], 
[".",".","6",".",".",".",".",".","."], 
[".",".",".",".",".",".",".",".","."], 
[".",".","1",".",".",".",".",".","."], 
[".","6","7",".",".",".",".",".","9"], 
[".",".",".",".",".",".","8","1","."], 
[".","3",".",".",".",".",".",".","6"], 
[".",".",".",".",".","7",".",".","."], 
[".",".",".","5",".",".",".","7","."]]

//Turn columns into rows
var transpose = grid =>
    grid[0].map(
        (_,c) => grid.map(
            row => row[c]
        )
    )

How would this look using regular functions? 使用常规函数看起来如何?

var transpose = grid =>     // defining `transpose` as function with parameter `grid`, returning the following expression
    grid[0].map(            // return values from first row mapped via following function
        (_,c) => grid.map(  // using second parameter which is an index to do column mapping
            row => row[c]   // returning the value with index of row but from column
        )
    )

So without this ES6 map function, it would be 2 nested for cycles: 因此,如果没有此ES6 map功能,则会嵌套2个循环:

 var grid = [[".",".",".","1","4",".",".","2","."], [".",".","6",".",".",".",".",".","."], [".",".",".",".",".",".",".",".","."], [".",".","1",".",".",".",".",".","."], [".","6","7",".",".",".",".",".","9"], [".",".",".",".",".",".","8","1","."], [".","3",".",".",".",".",".",".","6"], [".",".",".",".",".","7",".",".","."], [".",".",".","5",".",".",".","7","."]]; function transpose(grid) { var ret = []; for (var i = 0; i < grid[0].length; i++) { ret[i] = []; for (var j = 0; j < grid.length; j++) { ret[i][j] = grid[j][i]; } } return ret; } // use map for pretty printing the matrix console.log(grid.map(row => row.join(' '))); console.log(transpose(grid).map(row => row.join(' '))); 

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM