在angularjs数组中使用切片

时间:2015-04-01 16:43:04

标签: javascript arrays angularjs

在我的angularjs应用程序中,我需要手动删除或添加数据数组中的旧/新数据(服务在循环中执行)。要删除,我使用slice();但是有一个问题:项目被正确删除但是execVerif_distant();未执行下一个项目。用我的实际代码,execVerif_distant();只为半个时间执行每个项目。例如,如果我需要删除整个数组,则只删除一半。

            // start the loop, search in local datas
            angular.forEach($scope.seaDocument.datas.cages, function(itemLocalCages) {
                execVerif_local(itemLocalCages.url);
            });

            function execVerif_local(identifiant) {
                var iterSearch_local = 0;
                angular.forEach(responseZS, function(itemDistantCages) {
                    if (itemDistantCages.url == identifiant) {
                        iterSearch_local++;
                    }
                });
                // if we not find the local datas in distant datas
                if (iterSearch_local == 0) {
                    // verifItem(); call
                    verifItem('remove', identifiant);
                }
            }




                // verifItem();
                function verifItem(action, url) {
                    if (action == 'remove') {
                        var iIndex = -1;
                        angular.forEach($scope.seaDocument.datas.cages, function(itemLocalCages) {
                            iIndex++;
                            if (itemLocalCages.url == url) {
                                $scope.seaDocument.datas.cages.splice(iIndex,1);
                            }
                        });
                    } else {
                        // do nothing
                    }
                }

出了什么问题?

1 个答案:

答案 0 :(得分:1)

问题是foreach正在迭代你正在移除东西的同一个对象。要避免这种行为,请在循环之前克隆正在迭代的对象,并将它们作为单独的方法使用:

// ... code
var arrCopy = $scope.seaDocument.datas.cages.slice(); //this will create a deep copy.

angular.forEach(arrCopy, function(itemLocalCages) {
  iIndex++;
  if (itemLocalCages.url == url) {
    $scope.seaDocument.datas.cages.splice(iIndex,1);
  }
});
//... more code