报错TypeError: Cannot set properties of undefined (setting '0'):为何无法为rotatedArr赋值
错误原因与修复方案
错误原因
你遇到的TypeError是因为**rotatedArr初始是空数组,外层循环中每次访问rotatedArr[i]时,这个位置的元素还未被初始化,属于undefined**。当你试图给undefined的下标属性(比如rotatedArr[i][k])赋值时,JS不允许操作undefined的属性,所以抛出了这个错误。
举个直观的例子:第一次循环i=0时,rotatedArr[0]根本不存在,是undefined,这时候执行rotatedArr[0][0] = ...,本质是在给undefined的0属性赋值,这显然不合法。
修复代码
只需要在外层循环里,先给rotatedArr[i]初始化一个空数组,再进行内层赋值操作即可,另外别忘了返回旋转后的数组:
var rotate = function(matrix) { let rotatedArr = []; for(let i=0; i<matrix.length; i++){ // 先初始化当前行的空数组 rotatedArr[i] = []; for(let k=0; k<matrix.length; k++){ rotatedArr[i][k] = matrix[matrix.length-1-k][i] } } return rotatedArr; };
补充说明
如果是N*N的方阵,这个修复完全适用;如果是不规则矩阵,还需要根据matrix[i].length调整内层循环的长度,但你的代码默认处理方阵场景,所以上面的修复足够。
内容的提问来源于stack exchange,提问作者Aniket Ingawale
相关产品推荐
相关产品推荐

