Мне нужно рекурсивно проверить динамическую c древовидную структуру в Javascript - PullRequest
0 голосов
/ 26 февраля 2020

Мне нужна твоя помощь. Таким образом, на этот раз я хочу рекурсивно проверить свою древовидную структуру.

В основном это то, что мне нужно сделать: enter image description here

С другой стороны, у меня есть так называемый treeNode (пример: Article.Artnr) и с другой стороны, так называемый contextEntry (который имеет «Article»). Мне нужно проверить, существует ли имя в treeNode в contextEntry, если оно существует, мне нужно проверить его тип и затем go. Теперь сложная часть: Следующее имя в namesSplit - «Artnr», и мне нужно проверить, является ли оно свойством из «Article» в contextEntry. Опять же, если это так, мне нужно проверить его тип и go. Я не знаю заранее, насколько глубокой будет моя структура, поэтому я действительно буду признателен за вашу помощь в этом.

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 возможных типа данных: Примитив , Массив примитива , Объект , Массив объектов

, если значение в контексте это либо Примитив, либо Массив Примитивов, он выдаст ошибку, если это Объект, мне нужно просто извлечь его значение, и если это Массив Объектов, мне нужно найти нужный объект и затем извлечь значение из него

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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...