javascript 为每个树节点累计计算特定类型的子节点

v8wbuo2f  于 2023-03-21  发布在  Java
关注(0)|答案(1)|浏览(95)

我正在与这个问题作斗争,但没有成功。我有以下树:

它有两种类型的节点,question和category。category是粗体的,questions旁边有一个圆圈。category中的数字必须显示该节点的子类别cun(简单),但问题是另一个数字,必须显示树中该节点以下级别中的问题类型节点的数量之和。我不能这样做。
我的当前版本(经过多次修改):

if (treeNode.children && treeNode.children.length) {
            treeNode.questionCount = 0;
            treeNode.subcategoryCount = treeNode.children
                .filter((item) => item.type === NODE_TYPES.CATEGORY).length;
            for (let i = 0; i < treeNode.children.length; i++) {
                treeNode.questionCount += enrichWithNumberOfSubcategoriesAndQuestions(treeNode.children[i]);
            }

        }
        if (treeNode.type === NODE_TYPES.QUESTION) {
            return 1;
        } else if (treeNode.type === NODE_TYPES.CATEGORY) {
            return treeNode.children
                .filter((item) => item.type !== NODE_TYPES.CATEGORY).length;
        }
        return 0;
q7solyqu

q7solyqu1#

这里有一个方法。我们定义了一个递归函数,它返回节点内的问题数。

const updateNodeSubCategoryAndQuestionsCount = (treeNode) => {
    if (!treeNode.children?.length) return 0;

    const subCategories = [];
    const questions = [];

    treeNode.children.forEach((acc, curr) => {
        if (curr.type === NODE_TYPES.QUESTION) {
            questions.push(curr);
        } else if (curr.type === NODE_TYPES.CATEGORY) {
            subCategories.push(curr);
        }
    });

    treeNode.subcategoryCount = subCategories.length;
    treeNode.questionCount =
        questions.length +
        subCategories.reduce((acc, subCategory) => {
            return acc + updateNodeSubCategoryAndQuestionsCount(subCategory);
        }, 0);

    return treeNode.questionCount;
};

相关问题