2016-09-20 113 views
0

我試圖遞歸地調用一個函數(用於排序目的)但是得到一個錯誤。我試圖找到解決辦法,發現How to call function recursively; 我改變了我的代碼。因此,現在它看起來像這樣:在AngularJS中遞歸調用函數

$scope.orderCustom = function() { 

    qS.quickSort($scope.mydata, 0, mydata.length-1); 
}; 

var qS = { 
    quickSort: function quickSort(data, min, max) { 

     if (min < max) { 
      var p = qSP.quickSortPartition(data, min, max); 
      var newMax = p-1; 
      var newMin = p+1; 

      qS.quicksort(data, min, newMax); 
      qS.quicksort(data, newMin, max); 
     } 
    } 
}; 

var qSP = { 
    quickSortPartition: function quickSortPartition(data, min, max) { 

     var pivot = data[max].id; 
     var i = min; 
     for (var j = min; j <= max; j++) { 
      if (data[j].id <= pivot) { 
       var pom = data[j]; 
       data[j] = data[i]; 
       data[i] = pom; 
       i = i+1; 
      } 
     } 
     var pom = data[i]; 
     data[i] = data[max]; 
     data[max] = pom;  

     return i; 
    } 
}; 

我得到一個錯誤「錯誤:qS.quicksort不是一個函數」。有誰知道如何解決這個問題? 我仍然無法對stackoverflow留言,所以我不得不爲此打開一個新問題。任何幫助將被appriciated。 Thanx :)

+0

就叫'quickSort' – taguenizy

回答

0

最簡單的事情將是擺脫多餘的包裝的,只是使用的功能:

$scope.orderCustom = function() { 

    quickSort($scope.mydata, 0, mydata.length-1); 
}; 

function quickSort(data, min, max) { 

     if (min < max) { 
      var p = quickSortPartition(data, min, max); 
      var newMax = p-1; 
      var newMin = p+1; 

      quickSort(data, min, newMax); 
      quickSort(data, newMin, max); 
     } 
} 

function quickSortPartition(data, min, max) { 

     var pivot = data[max].id; 
     var i = min; 
     for (var j = min; j <= max; j++) { 
      if (data[j].id <= pivot) { 
       var pom = data[j]; 
       data[j] = data[i]; 
       data[i] = pom; 
       i = i+1; 
      } 
     } 
     var pom = data[i]; 
     data[i] = data[max]; 
     data[max] = pom;  

     return i; 
} 

請注意,您還必須糾正遞歸調用quickSort的拼寫,你曾用全部小寫quicksort

我認爲這只是一個編程練習,因爲您可以更好地使用內置sort()函數的實際代碼,或者您可能更喜歡使用orderBy過濾器。

例如,這確實一樣的,你看可以嘗試做:

function compare(a,b) { 
    if (a.id < b.id) 
    return -1; 
    if (a.id > b.id) 
    return 1; 
    return 0; 
} 

$scope.mydata.sort(compare); 
+0

AAAAH,多麼愚蠢的錯誤。當然,這是一個錯字,快速排序而不是quickSort。很好的接收。當然它現在起作用,沒有包裝(正如我最初寫的那樣)。非常感謝你,它會bug我誰知道多久:) – ljerka

+0

順便說一句,我不能使用orderBy在這裏,這就是爲什麼我寫我自己排序(見http://stackoverflow.com/questions/39572744/ angularjs-filter-orderby-ordering-one-variable-by-another) – ljerka

+0

@ljerka,你應該可以用比較函數調用sort,看看我編輯的帖子。 – Duncan

0

你不需要提及qS

只是quicksort而不是qS.quicksort