2010-12-06 6 views
2

나는 추가 인수로 호출 할 수있는 자바 스크립트 함수 간단한 재귀가 잃어버린. 인수를 전달하기 위해 Array.prototype.slice.call(arguments, 2)을 사용해 보았지만, 결국 하나의 요소 배열로 끝납니다. cb 함수는 배열을 기대하지 않기 때문에 실패합니다 (숨겨진 텍스트 상자).자바 스크립트 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