繁体   English   中英

如何在 javascript class 中使用递归?

[英]how to use recursion in javascript class?

class Tasks {
    constructor () {
        this.store = [];
    }

    addTask(taskName) {
        var task = {
        id: +Date.now(),
        task: taskName,
        children: []
            }
        this.store.push(task);
    }

    deleteTask(id) {
       this.store = this.store.filter(function(task) {return task.id! != 
       id});
    }
}

目前我有这段代码。 我通过var todos = new Tasks();访问它添加todos.add('Do something'); todods.delete(id); 这适用于非嵌套任务。 我想将其用于嵌套任务/待办事项。

我想在 delete add 方法中访问商店,这样我就可以递归地添加或删除子任务。

商店看起来像这样

nestedArr = [
    {
        id: 1,
        task: 'task 1',
        children[]
    },
    {
        id: 2,
        task: 'task 2',
        children [
            {
                id: 3,
                task: 'task 1',
                children[]
            },
            {
                id: 4,
                task: 'task 2',
                children [
                    {
                        id: 5,
                        task: 'task 1',
                        children[]
                    },
                    {
                        id: 6,
                        task: 'task 2',
                        children []
                    }
                ]
            }
        ]
    }
]

就像我可以使用函数来做这些,但我想在课堂上使用它

deleteTask(arr, id) {      .....      
  this.deleteTask(arr.children, id) {          ... }
}

相反,我会像这样构建商店,并让所有任务都将“父级”作为属性(如果没有父级则为 -1)。 children 数组应包含其子项的 ID。

如果你想根据task删除一些项目,只需按照以下顺序进行:

  1. 遍历所有项目以找到一个或多个匹配项。
  2. 删除已删除任务的所有子项。
  3. 如果有父 ID,如果父 ID 仍然存在,则将其从children数组中删除。
  4. 删除任务本身。

 nestedArr = [{ id: 1, task: 'task 1', parent: -1, children: [] }, { id: 2, task: 'task 2', parent: -1, children: [3] }, { id: 3, task: 'task 1', parent: 2, children: [] }, { id: 4, task: 'task 2', parent: -1, children: [5, 6] }, { id: 5, task: 'task 1', parent: 4, children: [] }, { id: 6, task: 'task 2', parent: 4, children: [] } ]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM