我有一个简单的递归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);
}
}
答案 0 :(得分:3)
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
,修复参数数组以考虑您正在打开的子组。