Javascript, используйте функцию в качестве глубокого счетчика рекурсии - PullRequest
1 голос
/ 26 июня 2019

Можно ли использовать функцию в качестве счетчика рекурсии?Я пытаюсь сделать рекурсию с глубоким счетчиком, данным с другого объекта.Для некоторой ситуации это будет число, для другой конкатенации строк.Например - обменивайте 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}

1 Ответ

0 голосов
/ 26 июня 2019

Да, вы можете сделать как

const f = (deep, something) => {
 .....
 var n = parseInt(deep);
 f1(deep, something);
 return f(deep +1, something);
}

и это можно сделать в Javascript

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...