js如何中断递归函数

如题,功能是为了生成一个多级数组内的某个id及他的父元素的id数组,但是在查询完毕以后retrun出生成的数组结果,依然还执行了剩下的循环,请问要如何中断并跳出呢

initArr = (id, type) => {
    let list = this.props[`${type}List`],
      arr = [];

    const getClassify = (list, id) => {
      for (let i of list) {
        if (i.item_category_code === id) {
          arr.push(i.item_category_code);
          console.log('查询完毕');
          console.log(arr);
          return arr;
        } else {
          arr.push(i.item_category_code);
          i.child ? getClassify(i.child, id) : (arr = []);
        }
      }
      console.log('遍历中');
      return arr;
    };

    console.log('生成数组:' + getClassify(list, id));
  } 

图片描述

启用了一个判断变量,达成条件以后下次循环判断数组已生成以后return

export const recursionArr = (list, id, name) => {
  let arr = [],
    end = false;

  const getClassify = (list, id) => {
    for (let i of list) {
      if (i[name] === id) {
        arr.push(i[name]);
        end = true;
      } else {
        if (end) return arr;
        arr.push(i[name]);
        i.child ? getClassify(i.child, id) : (arr = []);
      }
    }
    return arr;
  };

  return getClassify(list, id);
};
阅读 8.8k
1 个回答

不是执行了剩下的循环
而是递归到下一层了,如果你需要找到所有符合条件的节点,那么递归到下一层是不可避免的
如果你不想递归查找,那就要写好边界条件,要是不符合条件就不继续递归下去

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