1

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

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

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

我错过了什么?

4

1 回答 1

1

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

this.drawGrouping(tbody, objs, groupings, index + 1);
于 2013-08-08T00:50:56.593 回答