js 使用循环递归为什么无限循环了?

我根据对象中的code与数组中的做对比,然后成立的再执行一遍,可是只有两个能成立啊也就执行两回,怎么就无限循环了
function a() {
    for (let i=0;i<arr.length;i++) {
        let { code } = obj
        let newCode = code.substring(0, code.length -1)
        if (newCode===arr[i].code) {
            arr1.push(arr[i])
            console.log(arr1)
            a()
        }
    }
}
a()
阅读 2.4k
2 个回答

因为你没有已判断过的标记出来,导致每次执行a()方法时,都会拿到那个code,然后进入到if判断中。

你可以把已匹配到的arr[i]中的code设置为另一个变量,下次匹配时就匹配不到了,例如:

if (newCode===arr[i].code) {
    arr[i].code = '#';
    arr1.push(arr[i])
    console.log(arr1)
    a()
}

而且,你这个好像不用递归吧,直接一个循环就搞定了

按你说的这种要求,并不需要递归

function a() {
    for (let i=0;i<arr.length;i++) {
        let { code } = obj
        code = code.substring(0, code.length - 1)
        if (code===arr[i].code) {
            arr1.push(arr[i])
        } 
    }
}
a()
console.log(arr1)

递归无限循环,是因为没有设置终止条件。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题