0

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

基本上这就是我需要它做的: 在此处输入图像描述

一方面我有一个所谓的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);

我还必须检查上下文中每个值的类型。有 4 种可能的数据类型:PrimitiveArray of PrimitiveObjectArray of Objects

如果上下文中的值是基元或基元数组,它将引发错误,如果它是一个对象,我只需要提取它的值,如果它是一个对象数组,我需要找到正确的对象和而不是从中提取价值

VariableType 是一个枚举。我的检查功能是这样实现的:

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;
        }
    }
4

0 回答 0