Мне нужна твоя помощь. Таким образом, на этот раз я хочу рекурсивно проверить свою древовидную структуру.
В основном это то, что мне нужно сделать: ![enter image description here](https://i.stack.imgur.com/ijEYV.png)
С другой стороны, у меня есть так называемый 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;
}
}