You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何JS递归数组操作函数输出正确却抛出TypeError/Node stderr?

问题原因分析

你的代码抛出TypeError的直接原因是递归调用时传入了不存在的数组元素,导致后续尝试访问query[0]和query[1]时,query本身是undefined。

具体触发流程

我们一步步走一遍你的代码执行逻辑(以调用arrayManipulation(5, [[1,2,100],[2,5,100],[3,4,100]])为例):

  1. 初始调用recurring(array, queries[0], 0),此时y=0,处理第一个查询。
  2. 处理完后,判断y < queries.length(0 < 3成立),y自增为1,调用recurring(newArg, queries[1], 1),处理第二个查询。
  3. 处理完第二个查询,y=1 < 3成立,y自增为2,调用recurring(newArg, queries[2], 2),处理第三个查询。
  4. 处理完第三个查询,y=2 < 3仍然成立,y自增为3,此时调用recurring(newArg, queries[3], 3)——但queries数组只有3个元素(索引0、1、2),queries[3]是undefined!
  5. 进入recurring函数后,执行var start = query[0],试图从undefined上读取属性0,直接抛出TypeError: Cannot read properties of undefined (reading '0')。

额外的小问题

除了这个报错,你的代码还有一个逻辑瑕疵:递归调用时没有返回值,导致var solution = recurring(...)最终拿到的是undefined,而不是最终处理完的数组。比如在递归调用recurring(newArg, queries[y], y)时,需要加上return才能把最终的返回值传递上去。

修复方案

调整递归的判断逻辑,确保只有当还有未处理的查询时才进行递归,并且正确返回递归结果:

function arrayManipulation(n, queries) {
    var array = new Array(n).fill(0)
    var x = 0
    var recurring = (argmnt, query, y) => {
        var start = query[0], end = query[1]
        var newArg = argmnt.map((el, index) => {
            if(index+1 >= start && index+1 <= end){
                return query[2] + el
            }else{
                return el
            }
        })
        console.log(newArg)
        // 调整判断:当y+1 < queries.length时,说明还有下一个查询要处理
        if (y + 1 < queries.length ){
            // 递归调用时要return,把结果传递回去
            return recurring(newArg, queries[y+1], y+1)
        }else{
            return newArg
        }
    }
    var solution = recurring(array, queries[x], x)
    // 可以添加这行来查看最终结果
    console.log("Final solution:", solution)
    return solution
}

arrayManipulation(5, [[1, 2, 100], [2, 5, 100], [3, 4, 100]])

这样修改后,递归只会处理到最后一个查询(索引2),不会再尝试访问不存在的queries[3],同时递归的返回值会正确传递到最外层的solution变量中。

内容的提问来源于stack exchange,提问作者Devin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:29:55