2010-12-06 4 views
2

は、私は追加の引数で呼び出すことができますjavascript関数単純な再帰を持っています失われた私はArray.prototype.slice.call(arguments, 2)を使って引数を渡そうとしましたが、それらは1つの要素配列として終わります。 cb関数は配列を期待していないので失敗します(隠しテキストボックスになります)。Javascriptのslice.call(引数)と再帰

どうすれば解決できますか?

おかげ

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

答えて

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を使用しています。

+0

Doh!ニースとシンプル。ありがとう。 – user497075