Javascript slice.call(arguments) 和递归

标签 javascript recursion arguments

我有一个简单的递归 JavaScript 函数,可以使用附加参数调用:

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

问题是,如果函数必须调用自身,那么任何其他参数都会丢失。我尝试使用 Array.prototype.slice.call(arguments, 2) 来传递参数,但它们最终成为一个元素数组。然后 cb 函数会失败,因为它不需要数组(它将是一个隐藏的文本框)。

我该如何解决这个问题?

谢谢

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);
  }
}

在进行递归调用时,只需使用 apply 即可修复参数数组以说明您要打开的子组。

关于Javascript slice.call(arguments) 和递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4366765/

相关文章:

javascript - 如何知道 Firefox 插件中哪个内容脚本与后台进行通信?

javascript - Kendo UI - 如何引用控件?

c# - 合并两个集合,按属性递归组合重复项

java - java中的递归方法遇到问题

javascript - 如何在单击 Angular JS 图表时获取 x 轴和 y 轴?

javascript - 如果不到 1 分钟,PHP 表单提交警报

java - 使用递归从两个链表中查找公共(public)节点

python - 如何在Python中处理类**kwargs?

javascript - 如何在 Javascript 中用单个变量编写多个参数?

javascript - Javascript 中的无序函数参数