在JavaScript中递归生成行分组

时间:2013-08-08 00:37:44

标签: javascript recursion

我在使用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);

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

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

我错过了什么?

1 个答案:

答案 0 :(得分:1)

您正在递增内部index计数器,但不会在递归调用中传递递增版本。如果我遵循你的逻辑,你的意思是说:

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