gpt4 book ai didi

Javascript slice.call(arguments) 和递归

转载 作者:行者123 更新时间:2023-11-29 20:20:19 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com