我有一个简单的递归 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/