Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在上述函数完成之前我设置的角度变量_Javascript_Arrays_Angularjs - Fatal编程技术网

Javascript 在上述函数完成之前我设置的角度变量

Javascript 在上述函数完成之前我设置的角度变量,javascript,arrays,angularjs,Javascript,Arrays,Angularjs,我不太确定这个问题叫什么,但问题是 我有以下$watch: $scope.$watch('academyModules', function (newVal) { var i = 1; var shouldIUpdate = false; if ($scope.isSorted) { newVal.forEach(function (y) { if (y.sort_number != i) {

我不太确定这个问题叫什么,但问题是

我有以下
$watch

    $scope.$watch('academyModules', function (newVal) {
    var i = 1;
    var shouldIUpdate = false;
    if ($scope.isSorted) {
        newVal.forEach(function (y) {
            if (y.sort_number != i) {
                shouldIUpdate = true;
            }
            i++;
        });
        if (shouldIUpdate) {
            $scope.rearrangeModules();
        }
    }
}, true);



$scope.rearrangeModules = function () {
    var currentSortNumber = 1;
    for (var i = 0; i < $scope.academyModules.length; i++) {
        $scope.academyModules[i].sort_number = currentSortNumber;
        if ($scope.academyModules[i].module_id == null) {
            $http({
                url: api.getUrl('updateCourseSortNumber', [$scope.academyModules[i].id, $scope.academyModules[i].sort_number]),
                method: "POST",
                data: {
                    academyCourse: $scope.academyCourse
                }
            }).success(function (data, status, headers, config) {
            }).error(function (data, status, headers, config) {

            });
        }
        else {
            $http({
                url: api.getUrl('updateSortNumber', null),
                method: "POST",
                data: {
                    module: $scope.academyModules[i]
                }
            }).success(function (data, status, headers, config) {
            }).error(function (data, status, headers, config) {

            });
        }
        currentSortNumber++;
    }
}
它收集了两种类型的所谓的
模块
将它们插入到一个公共列表中,然后对该列表进行排序

我之所以对变量
isSorted
进行排序,是为了确保在创建列表时不会反复调用
watcher
函数

这适用于10以下的列表(主要是因为我认为排序足够快),但是对于较大的列表(比如20个项目),在列表生成之前调用
isSorted=1
,从而使我的系统以奇怪的方式重新排序列表中的项目


我的问题是如何避免这种情况?

看起来排序时使用了错误的比较函数,请尝试

return a.sort_number - b.sort_number;

相反。

比较函数的一般契约是三值的:if(ab)返回1;(或大于零的任何值)布尔表达式a>b是两个值(0或1),因此当areturn a.sort_number - b.sort_number;