vue.js typescript 递归报错,请问有其他的方法或如何改进代码?

递归获取树形结构会报以下bug,目前也就四五层的样子,只要展开节点的时候就报下面的错误了,我试过不递归的话,能展开第一层,但是一递归就报错
代码:
search2(rows:any, parentId:any) {

let result:any = [];
for (var i = 0; i < rows.length; i++) {
        var row = rows[i];
        if (!!parentId) {
            if (row.ParentId == parentId) {
                result.push(row);
            }
        } else {
            if (!!row.ParentId && row.ParentId == 0) {
                result.push(row);
            }
        }
}
return result;

}
createChildTree2(rows:any, parentTree:any) {

let nodeList:any = [];
let drs = this.search2(rows, parentTree.id);
let childrenData:Array<Model.treeGridModel>=[]
for (let i = 0; i < drs.length; i++) {
    let tree = {
                    id:0,
                    code:0,
                    name:"",
                    status:"",
                    remark:"",
                    parentId:0,
                    _checked:false,
                    isChecked:false,
                    children:childrenData,
                    selected:false,
                    expanded:false,
                    load:false,
                    parent:parent,
                    level:1,
                    isShow:true,
                    spaceHtml:''
    };
    let dr = drs[i];
    tree.id=dr["JobPositionId"]
    tree.code=dr["JobPositionId"]
    tree.name=dr["JobPositionName"]
    tree.status=dr["JobPositionName"]
    tree.remark=dr["JobPositionName"]
    tree.parentId=dr["ParentId"]
    tree._checked=false
    tree.isChecked=false
    tree.children=this.createChildTree2(rows, tree);
    tree.selected=false
    tree.expanded=false
    tree.load=false
    tree.parent=parent
    tree.level=1
    tree.isShow=true
    tree.spaceHtml=""
    nodeList.push(tree);
}
return nodeList;

}
async getPostTypeList(){

    let rs=await jobService.getJobList()
    let treeList:any = [];
    let rows=rs!.data.data
    let childrenData:Array<Model.treeGridModel>=[]
    let parent:object={}
    let drs = this.search2(rows, ''); 
    for (let i = 0; i < drs.length; i++) {
        let dr = drs[i];
        let tree = {
                    id:0,
                    code:0,
                    name:"",
                    status:"",
                    remark:"",
                    parentId:0,
                    _checked:false,
                    isChecked:false,
                    children:childrenData,
                    selected:false,
                    expanded:false,
                    load:false,
                    parent:parent,
                    level:1,
                    isShow:true,
                    spaceHtml:''
        };
        tree.id=dr["JobPositionId"]
        tree.code=dr["JobPositionId"]
        tree.name=dr["JobPositionName"]
        tree.status=dr["JobPositionName"]
        tree.remark=dr["JobPositionName"]
        tree.parentId=dr["ParentId"]
        tree._checked=false
        tree.isChecked=false
        tree.children=this.createChildTree2(rows, tree);
        tree.selected=false
        tree.expanded=false
        tree.load=false
        tree.parent=parent
        tree.level=1
        tree.isShow=true
        tree.spaceHtml=""
        treeList.push(tree);
    }
   return treeList

}
vue.runtime.esm.js:588 [Vue warn]: Error in render: "RangeError: Maximum call stack size exceeded"
warn @ vue.runtime.esm.js:588
logError @ vue.runtime.esm.js:1732
globalHandleError @ vue.runtime.esm.js:1727
handleError @ vue.runtime.esm.js:1716
Vue._render @ vue.runtime.esm.js:4534
updateComponent @ vue.runtime.esm.js:2783
get @ vue.runtime.esm.js:3137
run @ vue.runtime.esm.js:3214
flushSchedulerQueue @ vue.runtime.esm.js:2976
(anonymous) @ vue.runtime.esm.js:1832
flushCallbacks @ vue.runtime.esm.js:1753
vue.runtime.esm.js:1736 RangeError: Maximum call stack size exceeded

at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
at _traverse (vue.runtime.esm.js:1966)
阅读 2.6k
1 个回答

已用其他方法解决了,不用递归

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