Можно ли использовать функцию в качестве счетчика рекурсии?Я пытаюсь сделать рекурсию с глубоким счетчиком, данным с другого объекта.Для некоторой ситуации это будет число, для другой конкатенации строк.Например - обменивайте deepLevel + 1 при каждом вызове deep.inc ().Но в этом случае у меня нет подходящего значения в стеке ...
const render = (formatterData, parcedData) => {
const iter = (depth, data) => {
const mapped = data.map((node) => {
const { children = [] } = node;
const renderedChildren = children.length > 0 ? iter(depth.inc(), children) : '';
return `${formatterData.format(depth, node, renderedChildren)}`;
});
return `${mapped.join('')}`;
};
return `${formatterData.startElement}${iter(formatterData.depth, parcedData)}\n${formatterData.endElement}`;
};
FormatterData - это объект, предоставленный render, и зависит от типа визуализации.
const formatterData = {
startElement: '{',
endElement: '}',
depth: {
level: 1,
get() {
return this.level;
},
inc() {
this.level += 1;
return this;
},
},
format(depth, node, line) {
const { nodeRender } = getNodeRender(node);
return `${nodeRender(node, depth, line)}`;
},
};
Now part of console output looks like:
depth = {"level":2}
depth = {"level":3}
depth = {"level":3}
depth = {"level":4}
depth = {"level":5}
depth = {"level":6}
depth = {"level":7}
depth = {"level":8}
depth = {"level":9}
depth = {"level":10}
but should be:
depth = {"level":2}
depth = {"level":3}
depth = {"level":4}
depth = {"level":5}
depth = {"level":4}
depth = {"level":3}
depth = {"level":2}