【问题标题】:Generate row grouping recursively in JavaScript在 JavaScript 中递归生成行分组
【发布时间】:2017-10-10 06:32:18
【问题描述】:

我在使用 JavaScript 中生成具有多级行分组的表的函数时遇到问题。

递归函数称为drawGrouping,定义为:

this.drawGrouping = function(tbody, listOfObjects, groupings, index) {
  //check if there are grouping levels remaining
    if (index < groupings.length) {

        var g = groupings[index];

        var pvList = database.getValuesForProperty(g);

        for (var i = 0; i < pvList.length; i++) {
            var val = pvList[i];

               //creates a grouping <tr> row
            var row = this.generateGroupingRow(g, val, index+1);
            tbody.append(row);

               //returns a filtered list of objects that belong under this grouping
            var objs = database.filter(listOfObjects, g, '==', val);

               //call the function again, supplying the filtered list
               //and a new index
            this.drawGrouping(tbody, objs, groupings, index++);
        }

    } else {
        //exits the recursion and prints the regular table rows
        for (var i = 0; i < listOfObjects.length; i++) {
            tbody.append(this.generateTableRow(listOfObjects[i]));
        }

    }
}

然后我开始使用:

this.drawGrouping(tableBodyTag, listOfObjects, listOfGroupNames, 0);

问题是第一级分组工作正常,但后续级别只会出现在第一部分。我认为这是变量范围的问题,但我不确定。

这是带有一些垃圾数据的输出图像。该表已按“所有者名字”分组,然后按“财政期间”分组,由于某种原因,后一个分组仅出现一次。

我错过了什么?

【问题讨论】:

  • 为什么使用递归而不是普通循环?该函数不返回任何内容,如果返回,则不会在任何地方分配返回值。

标签: javascript recursion


【解决方案1】:

您正在递增您的内部index 计数器,但没有在递归调用中向下传递递增的版本。如果我按照你的逻辑,你的意思是说:

this.drawGrouping(tbody, objs, groupings, index + 1);

【讨论】:

  • 是的,就是这样。感谢您的帮助!
猜你喜欢
  • 2020-08-04
  • 2021-09-27
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多