Uncaught TypeError排查:矩阵转置函数无法读取undefined的'0'属性
错误原因与修复方案
问题分析
你遇到的Cannot read properties of undefined (reading '0')错误,根源是循环逻辑搞反了:
- 原输入矩阵是2行3列(
[[1,2,3],[4,5,6]]),转置后应该是3行2列。 - 你当前的外层循环遍历原矩阵的行数(2次),只创建了2个行数组,但内层循环遍历原矩阵的列数(3次)。当
j=2时,matrix[j]对应原矩阵的第3行,而原矩阵只有2行(索引0和1),所以matrix[2]是undefined,读取matrix[2][i]自然触发报错。
修复后的代码
function transpose(matrix) { var transposed = [], rows = matrix.length, cols = matrix[0].length; // 外层循环遍历原矩阵的列数(转置后的行数) for (var i = 0; i < cols; i++) { transposed[i] = []; // 内层循环遍历原矩阵的行数(转置后的列数) for (var j = 0; j < rows; j++) { transposed[i][j] = matrix[j][i]; } } return transposed; } let result = transpose([[1, 2, 3], [4, 5, 6]]); console.log(result) // 输出 [[1,4],[2,5],[3,6]],符合预期
关键修正点
- 外层循环次数从原矩阵的行数(
rows)改为列数(cols),保证转置后的行数等于原矩阵的列数。 - 内层循环次数从原矩阵的列数(
cols)改为行数(rows),保证转置后的列数等于原矩阵的行数。
内容的提问来源于stack exchange,提问作者dvsd9p7m
相关产品推荐
相关产品推荐

