JavaScript实现递归生成多维矩阵时出现RangeError错误如何解决
错误原因
- 缺失递归终止条件:当前代码没有判断递归结束的场景,会持续对
dims执行shift操作直到数组为空,此时取dims[0]得到undefined,给数组A的length属性赋值undefined就会直接触发Uncaught RangeError: Invalid array length报错。 - 函数名拼写错误:递归调用时写的是
matriz(dims),和实际定义的函数名matrix不一致,也会导致执行异常。 - 维度数组操作逻辑冗余:循环内反复拷贝、恢复
dims的逻辑完全没有必要,反而容易引入传参错误。
修复方案
直接使用如下修正后的代码即可实现预期效果:
function matrix(dims) { // 递归终止:只剩最后一维,直接生成0到n-1的连续数组 if (dims.length === 1) { return Array.from({length: dims[0]}, (_, index) => index) } // 取当前维度的大小,剩余维度直接用slice生成副本,不需要修改原数组 const currentSize = dims[0] const restDims = dims.slice(1) const result = [] for (let i = 0; i < currentSize; i++) { result.push(matrix(restDims)) } return result }
调用matrix([2,3,4])即可得到你预期的2×3×4三维矩阵结构。
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

