Javascript,使用函数作为递归深度计数器

标签 javascript function recursion ecmascript-6

是否可以使用函数作为递归计数器?我尝试使用另一个对象给出的深度计数器进行递归。对于某些情况它将是数字,对于另一个字符串连接。例如 - 在每次调用 deep.inc() 时交换 deepLevel + 1。 但在这种情况下,我在堆栈上没有适当的值......

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 是渲染给出的对象,取决于渲染类型。

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}

最佳答案

是的,你可以这样做

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

并且可以在 Javascript 中做到这一点

关于Javascript,使用函数作为递归深度计数器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768437/

相关文章:

jQuery .click 函数不适用于中键

recursion - 连续两次相同的 echo 调用在 Vim 函数中具有不同的输出

javascript - TypeScript:为什么同一个对象在定义时不能用接口(interface)赋值,但在作为参数传递时可以赋值

javascript - JS 测试驱动程序 "assertException"的正确语法?

javascript - 函数超时

javascript - 防止点击时触发滚动功能

Java 递归删除格式中的内容

haskell - 递归方案的库实现

javascript - 如何防止页面刷新时数据丢失?

javascript - 如何在浏览刷新时继续倒计时?