在AngularJS中递归调用函数

时间:2016-09-20 10:09:02

标签: angularjs

我试图以递归方式调用函数(用于排序)但是出错了。我试图找到一个解决方案并找到How to call function recursively; 我相应地更改了我的代码,现在它看起来像这样:

$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发表评论,因此我不得不为此打开一个新问题。任何帮助都会得到满足。 Thanx:)

2 个答案:

答案 0 :(得分:0)

您不需要提及qS

只需quicksort而不是qS.quicksort

答案 1 :(得分: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);