2016-09-20 109 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