我需要递归地检查Javascript中的动态树结构

我需要递归地检查Javascript中的动态树结构,javascript,recursion,tree-structure,Javascript,Recursion,Tree Structure,我需要你的帮助。所以这次的目标是递归地检查我的树结构 基本上这就是我需要它做的: 一边是所谓的treeNode(例如:“Article.Artnr”),另一边是所谓的contextEntry(有一个“Article”)。 我需要检查treeNode中的名称是否存在于contextEntry中,如果它存在,我需要检查它的类型,然后继续。现在有一个棘手的部分:namesSplit中的下一个名称是'Artnr',我需要检查它是否是contextEntry中'Article'的属性。再次,如果是,我需

我需要你的帮助。所以这次的目标是递归地检查我的树结构

基本上这就是我需要它做的:

一边是所谓的treeNode(例如:“Article.Artnr”),另一边是所谓的contextEntry(有一个“Article”)。 我需要检查treeNode中的名称是否存在于contextEntry中,如果它存在,我需要检查它的类型,然后继续。现在有一个棘手的部分:namesSplit中的下一个名称是'Artnr',我需要检查它是否是contextEntry中'Article'的属性。再次,如果是,我需要检查它的类型,然后继续。我事先不知道我的结构会有多深,所以我非常感谢你在这方面的帮助

let namesSplit = treeNode.name.split('.');

let key = namesSplit[0];

let contextEntry = exprData.contextEntry.find(_x => _x.name === key);
我实现了递归检查,如下所示:

function recursive(names, contextEntry) {
        for (let i = 0; i < names.length; i++) {
            if (names[i] === contextEntry.name) {
                // getType(contextEntry.value);
                console.log('Name found in Context: ' + names[i]);
                continue;
            }
            if (names[i] == Object.keys(contextEntry.value)) {
                console.log(getType(contextEntry.value));
                console.log('Child Name found in Context: ' + names[i]);
                // console.log(Object.values(contextEntry.value));
            }
        }
    }
    recursive(namesSplit, contextEntry);

这些值来自哪里<代码>上下文vs
contextEntry
?什么是
VariableType
(已编辑),您拥有的数据是什么,应该如何处理?什么不起作用?对不起,我刚刚更新了它,context和contextEntry是一样的。VariableType是定义4种数据类型的枚举。树结构和递归函数逻辑需要能够区分树上的叶子和分支。如果在一个分支上,递归函数可以继续查找该分支或其他分支上的叶子。如果是在叶子上,没有必要尝试从叶子的端点走得更远。递归逻辑还需要知道已经搜索了什么以避免无限循环条件。我更新了我的问题,我希望现在更清楚一些,一些示例输入和输出会有所帮助。
function getType(contextEntry.value) {
        if (Array.isArray(contextEntry.value)) {
            for (let i of contextEntry.value) {
                if (isPrimitive(i)) {
                    return VariableType.ARRAY_OF_PRIMITIVES;
                }
            }
            if (contextEntry.value.some(val => typeof val === 'object')) {
                return VariableType.ARRAY_OF_OBJECTS;
            }
        }
        if (typeof contextEntry.value === 'object' && contextEntry.value !== null) {
            return VariableType.OBJECT;
        }
        if (isPrimitive(contextEntry.value)) {
            return VariableType.PRIMITIVE;
        }
    }