开发者

Javascript slice.call(arguments) and recursion

I have a simple recursive javascript function that can be called with additional arguments:

AllDataRows(grid.Rows, process);
AllDataRows(grid.Rows, process, storeIDs);

The problem is that if the function has to call itself then any additional arguments are lost. I tried using Array.prototype.slice.call(arguments, 2) to pass the arguments along, but they end up as one element arrays. The cb function then fa开发者_如何学Goils because it isn't expecting an array (it would be a hidden textbox).

How can I resolve this?

Thanks

function AllDataRows(rowList, cb) {
  if (rowList.getRow(0).GroupByRow) {
    for (var i = 0; i < rowList.length; i++)
      AllDataRows(rowList.getRow(i).Rows, cb);
  } else {
    var args = Array.prototype.slice.call(arguments, 2);
    for (var j = 0; j < rowList.length; j++)
      cb.apply(rowList.getRow(j), args);
  }
}


function AllDataRows(rowList, cb) {
  if (rowList.getRow(0).GroupByRow) {
    for (var i = 0; i < rowList.length; i++) {
      var aa = Array.prototype.slice.call(arguments, 0);
      aa[0] = rowList.getRow(1).Rows;
      AllDataRows.apply(this, aa);
    }
  } else {
    var args = Array.prototype.slice.call(arguments, 2);
    for (var j = 0; j < rowList.length; j++)
      cb.apply(rowList.getRow(j), args);
  }
}

Just use apply when you make the recursive call, fixing up the argument array to account for the sub-group you're opening up.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜